【问题标题】:How to save custom objects inside of an array that holds more custom objects如何将自定义对象保存在包含更多自定义对象的数组中
【发布时间】:2013-11-03 21:54:33
【问题描述】:

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

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];

我坚持的是:如果我将一个对象添加到Person 对象内的NSMutableArray,我是否还必须将该对象数组 (EventsObject) 转换为 NSData

(我想我会这样做,但我似乎无法弄清楚如何定位该对象数组 (EventsObject) 以在 PersonArray 内进行转换。

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

【问题讨论】:

    标签: ios objective-c nsarray nsdata


    【解决方案1】:

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

    要取消存档,您需要反转该过程。

    【讨论】:

      猜你喜欢
      • 2012-01-18
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      相关资源
      最近更新 更多