我有一个像这样分解的数组:
PersonArray
PersonObject
1. NSstring (personsName)
2. NSMutableArray (EventsObject)
我可以使用以下代码保存此数组:
NSMutableArray *archiveArray = [NSMutableArray arrayWithCapacity:mutableDataArray.count];
for (BC_Person *personObject in mutableDataArray)
{
NSData *personEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:personObject];
[archiveArray addObject:personEncodedObject];
}
NSUserDefaults *userData = [NSUserDefaults standardUserDefaults];
[userData setObject:archiveArray forKey:@"personDataArray"];
[userData synchronize];
我坚持的是:如果我将对象添加到NSMutableArray
对象内的Person
,我是否还必须将该对象数组(EventsObject
)转换为NSData
?
(我想我会这么做,但我似乎无法弄清楚如何定位该对象数组(EventsObject
)以在PersonArray
内进行转换。
我希望我能以一种易于理解的方式解释这一点。
答案 0 :(得分:0)
NSArray
和其他一些类实现了NSCoding
协议。因此,您可以将代码简化为:
NSData *personData = [NSKeyedArchiver archivedDataWithRootObject:mutableDataArray];
NSUserDefaults *userData = [NSUserDefaults standardUserDefaults];
[userData setObject:personData forKey:@"personDataArray"];
[userData synchronize];
对于要归档的任何对象,您实施NSCoding
协议。所以对于BC_Person
它可能看起来像这样(我不知道这个类,所以我以一些属性为例):
- (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:self.firstName forKey:@"firstName"];
[encoder encodeObject:self.lastName forKey:@"lastName"];
[encoder encodeObject:self.eventObjects forKey:@"eventObjects"];
}
在此示例中,self.eventObjects
将是EventsObject
类的对象数组。数组知道如何编码自己,而对于EventsObject
,你实现了另一个-encodeWithCoder:
方法。
要取消归档,你就可以改变这个过程。