8

我正在构建一个利用 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 。

但是,我的问题是,当我encodeWithCoder:(NSCoder *)encoder在 MAStore 中调用方法时,如果实现[encoder encodeObject:stores forKey:kStores],存储在storesNSArray 中的所有对象都会调用该encoderWithCoder:(NSCoder *)encoder方法吗?

编辑

我问这个的原因是我想知道在我投入时间做这样的事情之前它是否会起作用。我有多个带有 NSArrays 的自定义 NSObjects,其中包含更多自定义 NSObjects。发现它不起作用将是一个漫长的过程。

4

1 回答 1

11

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

于 2011-11-03T01:28:14.400 回答