2013-04-25 2 views
0

У меня проблема с моим столом!NSMutableArray в NSUserDefault

Я использую разбор таблицы, но когда я меняю вид, моя таблица теряет данные. Поэтому я решил сохранить все данные в nsuserdefault; но здесь проблема NSUserDefault предупреждает меня: «Обратите внимание, что словари и массивы в списках свойств также должны содержать только значения свойств».

NB: itemsToDisplay - это NSMutableArray и содержит заголовок, url, data и summary of parsedItems.

Ну, вот мой код:

self.itemsToDisplay = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"items"] mutableCopy]; 

if (!self.itemsToDisplay) { 
    self.itemsToDisplay = [[NSMutableArray alloc] init]; 
} 

self.itemsToDisplay = [[NSMutableArray alloc]init]; 

self.itemsToDisplay = [parsedItems sortedArrayUsingDescriptors: 
         [NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:@"date" 
                      ascending:NO] autorelease]]]; 


[[NSUserDefaults standardUserDefaults] setObject:self.itemsToDisplay forKey:@"items"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

Я полагаю, что проблема заключается в SetObject: self.itemsToDisplay, но я не знаю, как решить эту проблему.

Спасибо ребята ..

ответ

1

Первая позволяет отметить, что таблица не может привести к потере данных, поскольку он не имеет каких-либо пользовательских данных. Данные предоставляются либо через привязки, либо через делегирование см. В NSTableViewDataSource в документации на яблоки).

Во-вторых, первые три присваивания self.itemsToDisplay не имеют никакой цели (если у вас нет побочных эффектов в сеттере), потому что они все переопределены последним назначением.

Наконец, если этот код уже присутствует в делегате, то делегат должен быть создан в вашем файле NIB, чтобы данные могли выжить после обмена представлением. Если ваш делегат является объектом, который создается с вашим представлением, он также погибнет вместе с ним, а все данные и запись в пользовательские значения по умолчанию - это плохая идея для того, чего вы пытаетесь достичь. Просто установите делегат на объект, чье время жизни больше, чем у обоих представлений.

+0

Проблема решена: D – arcangel06

0
self.itemsToDisplay = [parsedItems sortedArrayUsingDescriptors: 
         [NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:@"date" 
                      ascending:NO] autorelease]]]; 

//First lets encode it 
NSUserDefaults *userDefault=[NSUserDefaults standardUserDefaults]; 
NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:self.itemsToDisplay]; 
[userDefault setObject:myEncodedObject forKey:[NSString stringWithFormat:@"sample"]];