1
使用NSStreamEventHasSpace可用事件,我試圖寫一個簡單的NSString到一個NSOutputStream。這裏是該事件的內容: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;
我幾乎從蘋果公司採取了正確的。數據在我的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;
我也從蘋果得到這個。但是,「沒有數據寫入內存!」被記錄。任何時候都不會發生錯誤,並且另一端沒有收到任何數據。
UPDATE:即使在我調用[stream write:]之後檢查[stream propertyForKey:NSStreamDataWrittenToMemoryStreamKey],它也是(null)。 – Greg 2012-07-30 14:41:47
這一個的任何更新。你最終設法弄清楚了嗎? – Andrei 2012-08-26 17:03:01
不是。一點都沒有。抱歉。 – Greg 2012-08-26 23:37:43