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

#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 .