1

我有一个 NSMutableArray 和一个 NSString 。这两个归档到 NSData 并添加到 NSMutableData 对象。

如何从 NSMutableData 对象访问每个数据。

NSData *dataArray= [NSKeyedArchiver archivedDataWithRootObject:mutableArray];
NSData *dataTouchedNumer=[NSKeyedArchiver archivedDataWithRootObject:stringValue];                
NSMutableData *mutableData=[[NSMutableData alloc]init];
[mutableData appendData:dataArray];
[mutableData appendData:dataTouchedNumer];
4

2 回答 2

2

你不能按照你展示的方式做到这一点。如果将两个NSData对象一起附加到一个可变数据对象中,则以后无法将它们分开。试试这个:

归档这两个对象:

NSMutableArray *mutableArray = ... // your mutable array
NSString *stringValue = ... // your string

NSMutableData *data = [NSMutableData data];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:mutableArray forKey:@"array"];
[archiver encodeObject:stringValue forKey:@"string"];

此时,data包含两个对象。用数据做你需要的事情(例如保存它)。

要取回您的对象:

NSData *data = ... // the archived data
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
NSMutableArray *mutableArray = [unarchiver decodeObjectForKey:@"array"];
NSString *stringValue = [unarchiver decodeObjectForKey:@"string"];
于 2013-05-14T01:17:04.013 回答
0

根据文档,“archivedDataWithRootObject:返回一个NSData对象,其中包含给定根对象的对象图的编码形式。” 所以你的mutableData对象包含 2 个这样的编码对象图。问题是你想读取什么样的数据mutableData[mutableData bytes]简单地用 读取所有字节,或者用getBytes:length:or读取部分字节可能没有多大意义getBytes:range:

于 2013-05-13T12:55:45.430 回答