Что происходит с объектом NSArray при кодировании?

Я создаю приложение, которое использует 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. Это будет долгий процесс, чтобы обнаружить, что это не работает.


person Sebastien Peek    schedule 03.11.2011    source источник


Ответы (1)


Да. Кодер рекурсивно входит в объекты-контейнеры (массивы, словари, наборы и т. д.) и также кодирует все эти объекты. Вы столкнетесь с исключением, если один из внутренних объектов не поддерживает NSCoding.

person Ben Zotto    schedule 03.11.2011