#iphone #objective-c #nsarray #nsobject #nscoding
#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
}
Как вы можете видеть, у меня есть NSArray пользовательских NSObjects (MAStore). Каждый из этих объектов также реализует то же NSCoding, что и нет.
Однако мой вопрос заключается в том, что когда я вызываю encodeWithCoder:(NSCoder *)encoder
метод в MAStore, и он попадает в [encoder encodeObject:stores forKey:kStores]
, будут ли все объекты, хранящиеся в stores
NSArray encoderWithCoder:(NSCoder *)encoder
, вызывать метод, если он реализован?
Редактировать
Причина, по которой я спрашиваю об этом, заключается в том, что я хочу знать, будет ли это работать, прежде чем тратить время на выполнение такой вещи. У меня есть несколько пользовательских NSObjects с NSArrays, которые содержат больше пользовательских NSObjects. Было бы долгим процессом обнаружить, что он не работает.
Ответ №1:
ДА. Кодировщик рекурсивно переходит к объектам контейнера (массивам, словарям, наборам и т. Д.) И Также кодирует все эти объекты. Вы столкнетесь с исключением, если один из внутренних объектов не поддерживается NSCoding
.