2013-11-20 6 views
0

У меня возникли проблемы с хранением моего NSMutableArray, который содержит некоторые объекты. Внутри этих объектов есть также NSMutableArray, который содержит также некоторые объекты.Магазин NSMutableArray, который содержит объекты

Например: NSMutableArray "автомобили" -> NSObject "Порше" ---> NSMutableArray "Часть" ---> NSObject "Шина"

А теперь я хочу, чтобы сохранить первый массив "автомобили" , поэтому, когда я закрываю приложение и снова его открываю, массив все еще существует. Я прочитал несколько вариантов - например, NSUserDefaults. Я попробовал, но это не сработает.

Может кто-нибудь помочь/научить меня, как хранить NSMutableArray, как это?

Благодаря

EDIT

Если это дубликат, может кто-то показать мне, как это сделать ?? Потому что я пробовал почти каждый код, который я нашел в Google. Никакой код не работал.

+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}]; 
} 

Вы можете видеть, как это смешно получается ... Я думаю, что это и очень громоздко и не нужно. Вместо этого вы должны перейти к некоторому графику объектов, например Core Data.

+0

Теперь это работает для меня! используя этот код: [Здесь] (http://stackoverflow.com/questions/2315948/how-to-store-custom-objects-in-nsuserdefaults) У меня была глупая ошибка в моем коде. –

+0

Очень похож на мой ответ. Вы должны принять его, отметив галочку. – Mundi

Смежные вопросы