2011-11-03 15 views
8

Tôi đang xây dựng một ứng dụng sử dụng NSCoding để lưu NSObject's vào một documentPath. Tôi không gặp phải vấn đề gì, tôi chỉ tò mò về điều gì đó.Điều gì xảy ra với đối tượng NSArray khi mã hóa?

Tôi có MACompany, thực hiện các phương thức ủy nhiệm 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 

} 

Như bạn có thể thấy, tôi có NSArray tùy chỉnh NSObjects (MAStore). Mỗi một trong những đối tượng này cũng thực hiện cùng một NSCoding những gì không.

Tuy nhiên, câu hỏi của tôi là, khi tôi gọi encodeWithCoder:(NSCoder *)encoder phương pháp trong MAStore, và nó được cho là [encoder encodeObject:stores forKey:kStores], tất cả các đối tượng được lưu trữ trong stores NSArray sẽ có phương pháp encoderWithCoder:(NSCoder *)encoder gọi nếu được thực hiện?

EDIT

Lý do tôi yêu cầu này là tôi muốn biết có hay không nó sẽ làm việc trước khi tôi đầu tư thời gian vào làm một điều như vậy. Tôi có nhiều NSObject tùy chỉnh với NSArrays chứa nhiều NSObject tùy chỉnh hơn. Nó sẽ là một quá trình lâu dài để thấy rằng nó không hoạt động.

Trả lời

11

Có. Bộ mã hóa đệ quy đi vào các đối tượng container (mảng, từ điển, bộ, vv) và mã hóa tất cả các đối tượng đó. Bạn sẽ nhấn một ngoại lệ nếu một trong các đối tượng bên trong không hỗ trợ NSCoding.

+0

Cảm ơn bạn rất nhiều! : D –