如何从NSMutableData访问对象

时间:2013-05-13 12:22:48

标签: ios objective-c nskeyedarchiver nsmutabledata

我有一个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];

2 个答案:

答案 0 :(得分:0)

根据the docs,“archivedDataWithRootObject:返回一个NSData对象,其中包含给定根对象的对象图的编码形式。”所以你的mutableData对象包含2个这样的编码对象图。问题是您希望从mutableData中读出什么类型的数据。用[mutableData bytes]读取所有字节或用getBytes:length:getBytes:range:读取部分字节可能没什么意义。

答案 1 :(得分:0)

你不能按照你的方式做到这一点。如果将两个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"];