2012-07-27 61 views
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; 

我也從蘋果得到這個。但是,「沒有數據寫入內存!」被記錄。任何時候都不會發生錯誤,並且另一端沒有收到任何數據。

+0

UPDATE:即使在我調用[stream write:]之後檢查[stream propertyForKey:NSStreamDataWrittenToMemoryStreamKey],它也是(null)。 – Greg 2012-07-30 14:41:47

+0

這一個的任何更新。你最終設法弄清楚了嗎? – Andrei 2012-08-26 17:03:01

+0

不是。一點都沒有。抱歉。 – Greg 2012-08-26 23:37:43

回答