【问题标题】:How to access objects from NSMutableData如何从 NSMutableData 访问对象
【发布时间】:2013-05-13 12:22:47
【问题描述】:

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

【问题讨论】:

  • 你能告诉我们更多的代码吗?
  • 我只需要如何从 mutableData 访问数据。

标签: ios objective-c nskeyedarchiver nsmutabledata


【解决方案1】:

你不能按照你展示的方式来做这件事。如果将两个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"];

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      • 2017-12-29
      • 2011-01-15
      • 2018-09-20
      • 1970-01-01
      相关资源
      最近更新 更多