Что происходит с объектом NSArray при кодировании? - PullRequest
8 голосов
/ 03 ноября 2011

Я создаю приложение, которое использует 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, вызываемый, если реализован?

РЕДАКТИРОВАТЬ

Причина, по которой я спрашиваю это, заключается в том, что я хочу знать, действительно лиэто сработает, прежде чем я потрачу время на это.У меня есть несколько пользовательских объектов NSO с NSArrays, которые содержат больше пользовательских объектов NSO.Было бы долгим процессом обнаружить, что он не работает.

1 Ответ

11 голосов
/ 03 ноября 2011

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

...