2012-10-04 31 views
-1

如下所示的代码,它不会让我回退可变数组。我在我的可变数组中有3个注释,但是一旦关闭了我的应用程序并再次打开它,它就会显示我0个对象。我不知道为什么当我收回我的数组时,我正在获取O对象!任何想法?NSMutableArray使用NSUserDefaults进行NSData转换

-(void)viewDidLoad 
{ 
    NSUserDefaults *ud=[NSUserDefaults standardUserDefaults]; 

    if([ud boolForKey:@"save-exist"]) 
    { 
     NSMutableArray *udAnnotations=[[NSMutableArray alloc]initWithArray: [ud objectForKey:@"annotationsArray"]]; 
     NSLog(@"%d",[udAnnotations count]); 
    } 
    else 
    { 
     [self addAnno]; 
    } 
} 

-(void)addAnno 
{ 
    [mapView addAnnotations:annotationArray]; 
    NSUserDefaults *ud=[NSUserDefaults standardUserDefaults]; 
    [ud setObject:annotationArray forKey:@"annotationsArray"]; 
    [ud setBool:YES forKey:@"save-exist"]; 
    [ud synchronize]; 
} 

回答

2

您不能将MKAnnotation保存到NSUserDefaults中。 NSUserDefaults是属性列表;只有正确列表的对象可以存储在那里。您需要将MKAnnotation存档为NSData,以便将其保存在NSUserDefaults中。阅读文档,并看到例如Need to archive CLLocation data

+0

你可以给一个提示如何将MKAnnotation归档为NSData。我第一次听到归档。对不起,我对这个环境很陌生! – casillas

+1

顺便说一句,有arrayForKey应该处理mutablearray,我错了吗?我刚刚从应用程序文件中获得这些信息。 - (NSArray *)arrayForKey: (NSString *)defaultName – casillas

+1

很高兴你是“新环境”。我写了一本关于iOS编程的书,可能会对您有所帮助。如果您在编程之前学习基础知识,则不会提出被降低和关闭的问题。 – matt