1

我有一个这样分解的数组:

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.

我希望我以易于理解的方式解释这一点。

4

1 回答 1

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:方法。

并且要取消存档,您可以反转该过程。

于 2013-11-04T05:53:11.360 回答