Ios NSOutputStream未正确写入数据
使用NSSTREATEVENTHASSPACE available事件,我试图将一个简单的NSString写入NSOutputStream。以下是该活动的内容:Ios NSOutputStream未正确写入数据,ios,objective-c,cocoa-touch,stream,nsoutputstream,Ios,Objective C,Cocoa Touch,Stream,Nsoutputstream,使用NSSTREATEVENTHASSPACE available事件,我试图将一个简单的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
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;
我几乎完全是从苹果那里得到的。数据在我的viewDidLoad方法中初始化为
data = [NSMutableData dataWithData:[@"test message" dataUsingEncoding:NSUTF8StringEncoding]];
[data retain];
HasSpaceAvailable事件被调用两次。在第一种情况下,整个消息都会附加字符“N.”。第二次,NSLog报告写入了一条空白消息(非空)。然后,发生EndEncounted事件。在那种情况下,我有
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;
我也从苹果公司得到了这个。但是,“没有数据写入内存!”会被记录。没有任何错误发生在任何时候,并且没有数据出现在另一端。 < P>我似乎通过使用低级别的核心基础方法来代替这一点,而不是使用更高级别的NSFASH方法。我将本文作为起点: 它涵盖了大量的输入和输出流,并有代码示例
希望这有帮助。 < P>我似乎通过使用低层次的核心基础方法代替了更高级的NSFASH方法来解决这个问题。我将本文作为起点: 它涵盖了大量的输入和输出流,并有代码示例
希望这有帮助。更新:即使我在调用[stream write:]后立即检查[stream Property Workey:NSStreamDataWriteEntomermoryStreamKey],它仍然是(null)。这方面的任何更新。你最终找到答案了吗?更新:即使我在调用[stream write:]后立即检查[stream Property Workey:NSStreamDataWriteEntomeMoryStreamKey],它仍然是(null)。这方面的任何更新。你最终找到答案了吗?