2013-11-20 99 views
0

我在存儲保存一些對象的NSMutableArray時遇到了問題。在這些對象內部還有一個NSMutableArray,它也包含一些對象。存儲保存對象的NSMutableArray

例如:NSMutableArray的 「汽車」 - > NSObject的 「保時捷」 ---> NSMutableArray的 「零件」 ---> NSObject的 「輪胎」

,現在我想保存第一個陣列 「汽車」 ,所以當我關閉應用程序並再次打開時,數組仍然存在。 我讀了幾個選項 - 例如NSUserDefaults。我試過了,但它不起作用。

有人可以幫助/教我如何存儲這樣的NSMutableArray?

感謝

編輯

如果這是一個重複的,可有人告訴我該怎麼辦呢?因爲我嘗試了幾乎所有在谷歌上找到的代碼。沒有代碼工作。

+0

你試過了什麼代碼? –

+0

我試了這麼多代碼..與NSCoding代碼和類似的東西。例如:[link](http://stackoverflow.com/questions/537044/storing-custom-objects-in-an-nsmutablearray-in-nsuserdefaults) –

回答

0

如果您將數組存儲在plist或NSUserDefaults中,它總是不可變的。閱讀後必須使其變得可變。用一個簡單的數組,這是微不足道的。

NSMutableArray *mutable = [arrayFromUserDefaults mutableCopy]; 

NSMutableArray *mutable = [NSMutableArray arrayWithArray:arrayFromUserDefaults]; 

然而,在層次結構像你描述它變得更加複雜。基本上你必須遍歷整個層次結構並在必要時創建可變數組。

請注意,plist和用戶默認都不能存儲您的NSObject。您必須將其轉換爲NSDictionary,使用「名稱」和「部件」等鍵來存放名稱字符串或零件數組。

NSMutableArray *mutable = [NSMutableArray array]; 
for (NSDictionary *car in arrayFromUserDefaults]) { 
    NSArray *immutableParts = car[@"parts]; 
    NSMutableArray *parts = [immutableParts mutableCopy]; 
    [mutable addObject:@{"name":car[@"name"], @"parts":parts}]; 
} 

你可以看到這是多麼荒謬......我認爲這是非常繁瑣和不必要的。相反,你應該轉向某種對象圖形,比如核心數據。

+0

它現在適用於我!使用此代碼:[Here](http://stackoverflow.com/questions/2315948/how-to-store-custom-objects-in-nsuserdefaults)我在我的代碼中有一個愚蠢的錯誤。 –

+0

這與我的回答非常相似。您應該通過勾選複選標記來接受它。 – Mundi