2012-01-11 109 views
2

我試圖讓plist存儲多組數據,但每次保存時(使用ActionSheet中的按鈕),它都會覆蓋之前的設置。我想添加多個「朋友」和他們的數據。我不太喜歡使用核心數據,所以我想知道如何用Plist做到這一點。向Plist寫入一組新數據而不是覆蓋它

這裏是保存按鈕的代碼:

 NSMutableDictionary *friend = [[NSMutableDictionary alloc] init]; 

     NSMutableDictionary *array = [[NSMutableDictionary alloc]init]; 
     [array setObject:friendName.text forKey:@"Name"]; 
     [array setObject:friendPhone.text forKey:@"Phone Number"]; 
     [array setObject:friendEmail.text forKey:@"Email Address"]; 
     [array setObject:friendChatSN.text forKey:@"Chat Screen Name"]; 

     [friend setValue:array forKey: @"Friend Data"]; 


     NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); 

     NSString *documentsPath = [paths objectAtIndex:0]; 

     NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"FriendList.plist"]; 

     [friend writeToFile:plistPath atomically: TRUE]; 

而不是覆蓋它,我怎麼能修改代碼,每次我保存添加一組新朋友的數據?

+0

我錯過的東西或[朋友的setValue:陣列forKey:@ 「朋友數據」];你的問題是?你會覆蓋你的舊數據,每次在字典中將數組值設置爲相同的密鑰... – 2012-01-11 09:23:22

+0

我知道我正在覆蓋它。我對iOS相當陌生,我不知道如何編寫代碼來保存一組新的值。如果你能更清楚地修改我的代碼,我真的很感激它。 – 2012-01-11 09:31:42

回答

10

這裏pList表現爲一個對象。所以每當你試圖寫一些東西來plist它將被替換爲新的數據。

看起來像你想保存多個朋友記錄到plist文件。你的問題的最佳解決方案是使用核心數據或sqlite。但是,如果你想用plist來實現它,那麼首先從plist中獲取舊數據,然後將新數據(朋友)添加到舊數據中,然後保存到plist中即可解決問題。

根據您的要求,您應該將NSArray與多個NSDictionary(朋友記錄)對象保存到pList。

這裏是修改後的代碼

NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); 

    NSString *documentsPath = [paths objectAtIndex:0]; 

    NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"FriendList.plist"]; 

    NSMutableArray *friend = [NSMutableArray arrayWithContentsOfFile:plistPath]; 

    if (nil == friend) { 
     friend = [[NSMutableArray alloc] initWithCapacity:0]; 
    } 
    else { 
     [friend retain]; 
    } 


    NSMutableDictionary *array = [[NSMutableDictionary alloc]init]; 
    [array setObject:friendName.text forKey:@"Name"]; 
    [array setObject:friendPhone.text forKey:@"Phone Number"]; 
    [array setObject:friendEmail.text forKey:@"Email Address"]; 
    [array setObject:friendChatSN.text forKey:@"Chat Screen Name"]; 

    [friend addObject:array]; 
    [array release]; 



    [friend writeToFile:plistPath atomically: TRUE]; 
    [friend release]; 
+1

謝謝。我非常感謝你的幫助。 – 2012-01-11 10:33:02

0

而不是[friend setValue:array forKey:@「Friend Data」];使用一個唯一的鍵代替@「朋友數據」,比如朋友姓名(至少是...),或者您的字典中每次只有一個條目。