编码时NSArray对象会发生什么?

时间:2011-11-03 01:20:50

标签: iphone objective-c nsarray nsobject nscoding

我正在构建一个利用NSCoding将NSObject保存到documentPath的应用程序。 我没有遇到任何问题,我只是对某事感到好奇。

我有MACompany,它实现了NSCoding委托方法。

- (void) encodeWithCoder:(NSCoder *)encoder {

     [encoder encodeObject:address_1 forKey:kAddress_1];
     [encoder encodeObject:address_2 forKey:kAddress_2];
     [encoder encodeObject:city_town forKey:kCity_Town];
     [encoder encodeObject:company_name forKey:kCompany_Name];
     [encoder encodeObject:country forKey:kCountry];
     [encoder encodeObject:date_added forKey:kDate_Added];
     [encoder encodeObject:fax forKey:kFax];
     [encoder encodeObject:parent_company_website forKey:kWebsite];
     [encoder encodeObject:postal_code forKey:kPostal_Code];
     [encoder encodeObject:state_province forKey:kState_Province];
     [encoder encodeObject:type forKey:kType];

     [encoder encodeObject:stores forKey:kStores]; //NSArray of custom NSObjects

}

正如你所看到的,我有一个自定义NSObjects(MAStore)的NSArray。这些对象中的每一个也实现了相同的NSCoding。

但是,我的问题是,当我在MAStore中调用encodeWithCoder:(NSCoder *)encoder方法并且它到达[encoder encodeObject:stores forKey:kStores]时,stores NSArray中存储的所有对象都将具有{{1如果实现了调用方法?

修改

我之所以这么说的原因是我想知道在我投入时间做这件事之前它是否会起作用。我有多个带有NSArrays的自定义NSObject,它们包含更多自定义NSObject。找到它不起作用将是一个漫长的过程。

1 个答案:

答案 0 :(得分:11)

是。编码器递归地进入容器对象(数组,字典,集合等)并对所有这些对象进行编码。如果其中一个内部对象不支持NSCoding,则会遇到异常。