2012-10-04 29 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