我想通過wifi/blutooth從一個iphone發送信息字典到另一個iphone,爲此我實現了CFnetwork和NSNetservice Concept.I在Reciver端收到數據。UnArchived獲取錯誤NSMutableDictionary o NSData?
我沒有代碼如下....
**Sender Side**
samDict=[NSMutableDictionary dictionary];
[samDict setObject:@"Muhammed Musthafa" forKey:@"PP"];
[samDict setObject:@"John P" forKey:@"Jose"];
[samDict setObject:@"Lubaba" forKey:@"P"];
[samDict setObject:@"JINI" forKey:@"KS"];
[samDict setObject:@"Anusha" forKey:@"GS"];
[samDict setObject:@"Athulya" forKey:@"V"];
[samDict setObject:@"Riyas" forKey:@"MM"];
[samDict setObject:@"Raihanath" forKey:@"MH"];
[samDict setObject:@"Shabeer" forKey:@"poola"];
[samDict setObject:@"Rajisha" forKey:@"Raji"];
//NSLog(@" Dictionary values.............%@",samDict);
NSMutableData *ArchiveData=[[NSMutableData alloc]init];
NSKeyedArchiver *archiver=[[NSKeyedArchiver alloc]initForWritingWithMutableData:ArchiveData];
[archiver setOutputFormat: NSPropertyListXMLFormat_v1_0];
[archiver encodeObject:self.samDict forKey:@"Some Key Values"];
[archiver finishEncoding];
[archiver release];
const uint8_t *buffer=(const uint8_t *)[ArchiveData bytes];
NSInteger nWrtitten=[_outStream write:buffer maxLength:[ArchiveData legth]];
if (!nWrtitten)
{
NSLog(@"Eorror writting to Stream %@ : %@", _outStream, [_outStream streamError]);
}
else
{
NSLog(@" Write %ld bytes to Stream %@",(long)nWrtitten, _outStream);
}
接收機側
NSInteger bytesRead;
uint8_t buffer[13000];
NSMutableData *data=[[NSMutableData data]retain];
if (stream==_inStream)
{
bytesRead=[_inStream read:buffer maxLength:sizeof(buffer)];
if (bytesRead==-1&& bytesRead==0)
{
NSLog(@"_inStream Error...................");
}
else
{
[data appendBytes:buffer length:bytesRead];
NSLog(@"Data Received has length :%d\n\n",[data length]);
NSLog(@"data............%@",data);
}
}
我在接收機Side.that得到數據是以字節爲單位的格式。 side.if我試圖未歸檔這解釋格式這樣
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
NSMutableDictionary* UnArchiveDictionary =[NSMutableDictionary dictionary];
UnArchiveDictionary = [[unarchiver decodeObjectForKey:@"Some Key Values"] retain];
NSLog(@"UnArchive Dictionary %@",UnArchiveDictionary);
但不幸的是ican't未存檔此數據字典格式,我不能解除存檔在接收這個數據。我收到線NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
的錯誤我已經找到了在轉換字節的數據一些代碼字符串格式這樣
size_t length=[data length];
unsigned char aBuffer[length];
[data getBytes:aBuffer length:length];
aBuffer[length - 1]=0;
NSString *messageString =aBuffer;
NSLog (@"%s",messageString);
但我的問題是如何得到相同的字典。爲什麼在未歸檔時間出錯?
1)你得到什麼錯誤? 2)請遵守命名約定,不要用大寫字母開始變量。 3)如果你立即覆蓋變量,不要將對象賦值給變量(比如你的'UnArchiveDictionary','[NSMutableDictionary dictionary]'是不必要的(而鍵控的unarchiver會給你一個'NSDictionary',而不是'NSMutableDictionary')。 – DarkDust 2011-12-20 11:44:47
由於未捕獲的異常'NSInvalidArgumentException'而終止應用,原因:'*** - [NSKeyedUnarchiver initForReadingWithData:]:不可理解的歸檔(0x62,0x70,0x6c,0x69,0x0,0x0,0x0,0x0)' – 2011-12-20 11:50:28
如果你不心理可以解釋NSKeyedUnarchiver難以理解的檔案異常 – 2011-12-20 11:55:33