ios - NSOutputStream 没有正确写入数据

标签 ios objective-c cocoa-touch stream nsoutputstream

使用 NSStreamEventHasSpace 可用事件,我试图将一个简单的 NSString 写入 NSOutputStream。以下是该事件的内容:

uint8_t *readBytes = (uint8_t *)[data mutableBytes];
readBytes += byteIndex; // instance variable to move pointer
int data_len = [data length];
unsigned int len = ((data_len - byteIndex >= 12) ?
                            12 : (data_len-byteIndex));
uint8_t buf[len];
(void)memcpy(buf, readBytes, len);
len = [output write:(const uint8_t *)buf maxLength:len];
NSLog(@"wrote: %s", buf);
byteIndex += len;

我几乎是直接从 Apple 那里拿来的。数据在我的 viewDidLoad 方法中用

初始化
data = [NSMutableData dataWithData:[@"test message" dataUsingEncoding:NSUTF8StringEncoding]];
[data retain];

HasSpaceAvailable 事件被调用了两次。在第一个中,整个消息都用字符“N”书写。附加到它。第二次,NSLog 报告写入了一条空白消息(不为空)。然后,EndEncountered 事件发生。在那种情况下,我有

NSLog(@"event: end encountered");
assert([stream isEqual:output]);
NSData *newData = [output propertyForKey: NSStreamDataWrittenToMemoryStreamKey];
if (!newData) {
    NSLog(@"No data written to memory!");
} else {
    NSLog(@"finished writing: %@", newData);
}
[stream close];
[stream removeFromRunLoop:[NSRunLoop currentRunLoop]
                  forMode:NSDefaultRunLoopMode];
[stream release];
output = nil;
break;

我也是从 Apple 那里得到的。然而,“没有数据写入内存!”被记录。任何时候都没有错误发生,另一端似乎没有收到任何数据。

最佳答案

我似乎已经通过使用低级别的 Core Foundation 方法而不是更高级别的 NSStream 方法解决了这个问题。我以这篇文章为起点:

http://oreilly.com/iphone/excerpts/iphone-sdk/network-programming.html

它涵盖了很长的输入和输出流,并有代码示例。

希望这对您有所帮助。

关于ios - NSOutputStream 没有正确写入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11689264/

相关文章:

ios - AFNetworking 返回函数

ios - 场景编辑器:如果没有@ 2x,则无法指定纹理名称

ios - 从 iOS 应用打开 iTunes Store

iphone - 如何在代码中识别 UITableViewCell?

iphone - 自定义 UITabBar 背景图像在 iOS 5 及更高版本中不起作用

ios - Xcode 4.6中的iOS7的statusBar

ios - 单个自定义对象的 Swift NSCoding 问题

ios - UIPickerView 不会显示

ios - 对所有导航都使用模式不好吗?

swift - 在 cocoa touch 框架中使用 firebase 框架