簡體   English   中英

如何在包含更多自定義對象的數組中保存自定義對象

[英]How to save custom objects inside of an array that holds more custom objects

我有一個分解成這樣的數組:

PersonArray
    PersonObject
       1. NSstring (personsName)
       2. NSMutableArray (EventsObject)

我可以使用以下代碼保存此數組:

NSMutableArray *archiveArray = [NSMutableArray arrayWithCapacity:mutableDataArray.count];
for (BC_Person *personObject in mutableDataArray)
{
    NSData *personEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:personObject];
    [archiveArray addObject:personEncodedObject];
}

NSUserDefaults *userData = [NSUserDefaults standardUserDefaults];
[userData setObject:archiveArray forKey:@"personDataArray"];
[userData synchronize];

我遇到的問題是:如果將一個對象添加到Person對象內部的NSMutableArray中,我是否還必須將該對象數組( EventsObject )轉換為NSData

(我假設我這樣做,但我似乎無法弄清楚如何定位對象的數組( EventsObject )到內部轉換PersonArray

我希望我以一種易於理解的方式對此進行解釋。

NSArray和其他一些類實現NSCoding協議。 因此,您可以將代碼簡化為:

NSData *personData = [NSKeyedArchiver archivedDataWithRootObject:mutableDataArray];
NSUserDefaults *userData = [NSUserDefaults standardUserDefaults];
[userData setObject:personData forKey:@"personDataArray"];
[userData synchronize];

對於要歸檔的任何對象,您都可以實現NSCoding協議。 因此,對於BC_Person來說,它可能看起來像這樣(我不知道該類,所以我以一些屬性為例):

- (void)encodeWithCoder:(NSCoder *)encoder {

    [encoder encodeObject:self.firstName forKey:@"firstName"];
    [encoder encodeObject:self.lastName forKey:@"lastName"];
    [encoder encodeObject:self.eventObjects forKey:@"eventObjects"];
}

在此示例中, self.eventObjects將是EventsObject類的對象數組。 該數組知道如何進行編碼,並且為EventsObject實現了另一個-encodeWithCoder:方法。

要取消存檔,您可以逆轉該過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM