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