Я пытаюсь отправить словарь информации с одного iphone на другой iphone через wifi/blutooth, для этого я реализую 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);
}
Receiver сторона
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);
Но моя проблема заключается в том, как получить обратно тот же словарь. Зачем нужна ошибка в Unarchived time?
1) Какую ошибку вы получаете? 2) Пожалуйста, придерживайтесь соглашений об именах, не начинайте переменные с прописных букв. 3) Не присваивайте объектам переменные, если вы их переписываете немедленно (например, ваш 'UnArchiveDictionary',' [NSMutableDictionary dictionary] 'не нужен (и ключ-unarchiver с ключом даст вам' NSDictionary', а не 'NSMutableDictionary'). – DarkDust
Завершение приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: «*** - [NSKeyedUnarchiver initForReadingWithData:]: непонятный архив (0x62, 0x70, 0x6c, 0x69, 0x0, 0x0, 0x0, 0x0) ' –
, если u не ум может у объяснить NSKeyedUnarchiver непонятное архивное исключение –