Хранение NSMutableArray UIViews в NSUserDefaults - PullRequest
0 голосов
/ 18 февраля 2011

Я прочитал несколько сообщений об этом, но я не могу исправить ошибку. Если кто-то может, пожалуйста, помогите.

Вот код, который я использую. У меня есть NSMutableArray с именем list.

-(void) awakeFromNib
{
prefs=[[NSUserDefaults standardUserDefaults]retain];

if ([prefs arrayForKey:@"list"]) {
    list=[[NSMutableArray alloc]initWithArray:[prefs objectForKey:@"list"]];
}
else {
    list=[[NSMutableArray alloc]init];
}    
}

-(void)saveData
 {
   NSLog(@"saving data!");
  [prefs setObject:list forKey:@"list"];
 }
- (void)dealloc {

[self saveData];
[prefs synchronize];
[prefs release];

 }

Ответы [ 2 ]

1 голос
/ 18 февраля 2011

Вы не можете хранить экземпляры UIView в пользовательских значениях по умолчанию, но только объекты, которые можно сериализовать в списке свойств (см. здесь ). Также, как сказал @Justin, не сохраняйте и не освобождайте объект по умолчанию.

0 голосов
/ 18 февраля 2011

Спасибо. Однако ранее я читал, что вы не можете сохранить NSMutableArray в NSUserDefaults, поэтому я попытался преобразовать его в NSData и затем использовать его.

Вот мой файл ViewController.m:

-(id)initWithCoder:(NSCoder *)aDecoder
{
self=[[calViewController alloc]init];
if (self!=nil) {
    self.list=[aDecoder decodeObjectForKey:@"list"];
}
return self;
}

-(void)encodeWithCoder:(NSCoder *)aCoder
 {
  [aCoder encodeObject:list forKey:@"list"];
 }

А вот мой файл AppDelegate.m:

-(void) applicationDidFinishLaunching:(UIApplication *)application
{
NSLog(@"Application did finish launching");
defaults=[NSUserDefaults standardUserDefaults];
NSData *dataRepresentingSavedArray=[defaults objectForKey:@"lastArray"];
if (dataRepresentingSavedArray!=nil) {
    NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray];
    if (oldSavedArray != nil)
    {
        listAr = [[NSMutableArray alloc] initWithArray:oldSavedArray];
    else
    {
        listAr = [[NSMutableArray alloc] init];
        NSLog(@"listAr: %@",listAr);
    }

}
}

 -(void) applicationWillTerminate:(UIApplication *)application
   {
      [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:listAr] forKey:@"lastArray"];        
   }

Я никогда не использовал UserDefaults раньше, и я совершенно сбит с толку. Я прочитал все документы, но, похоже, я не совсем понял!

EDIT:

-(void) applicationDidFinishLaunching:(UIApplication *)application
{
NSLog(@"Application did finish launching");
defaults=[NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"lastArray"]) {
    NSData *dataRepresentingSavedArray=[defaults objectForKey:@"lastArray"];

if (dataRepresentingSavedArray!=nil) {
    NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray];
    if (oldSavedArray != nil)
        listAr = [[NSMutableArray alloc] initWithArray:oldSavedArray];
    }
}
    else
    {
        listAr = [[NSMutableArray alloc] init];
        NSLog(@"listAr: %@",listAr);
    }

}
...