2011-07-21 53 views
1

我有一個填充了我的應用程序附帶的數據的.plist。有關於保存到plist的問題

它基本上是一個包含其他數組/字典的字典數組。

我從這個數組中取得的值和在我的應用程序中使用的值可能是一個名稱,所以「計算機」。

我添加了一個功能,讓用戶創建自己的項目,而不是從數組中加載的內容中進行選擇。但是,我應該將這個項目保存到同一個.plist中,還是爲每個用戶創建一個單獨的.plist?

然後,我該如何從標準.plist和用戶創建的.plist中獲取信息並將它們加載到一個tableView中?

回答

2

如果您正在爲iOS編寫代碼,您無法真正保存到同一個plist文件,因爲您無法寫入應用程序包。
你可以做的一件事就是將該plist的副本保存到應用程序的Documents文件夾中,然後修改該plist,這樣所有的數據都統一在一個文件中。
或者您始終可以從應用程序包中加載原始plist,製作NSArray的可變副本,從Documents文件夾中加載用戶對象的附加plist,並通過調用addObjectsFromArray將它們附加到NSMutableArray
或者你甚至可以將它們保存在單獨的NSArray中,但通過從表格視圖數據源的tableView:numberOfRowsInSection:方法中返回[originalDataArray count] + [userDataArray count],並在tableView:cellForRowAtIndexPath:方法中使用適當的數據,將它們顯示在表格視圖中。

編輯:

關於保存用戶數據,你不必擔心寫的plist。
NSArray符合NSCoding協議,因此NSDictionary也是如此,這意味着您可以使用類似NSKeyedArchiver類的方式輕鬆保存並加載它。

下面是我在一箇舊項目中的一個例子,其中我有一個NSMutableArray,它保存了一些用戶生成的數據,並且我保存並加載了它NSKeyedArchiver(簡化爲僅顯示相關代碼,一年前我剛剛開始使用ios,所以可能不是最好的方式):

- (BOOL) saveData 
{ 
    BOOL success = NO; 

    NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO); 

    NSString *path = [[[pathList objectAtIndex:0] stringByAppendingPathComponent:@"data.txt"] stringByExpandingTildeInPath]; 

    success = [NSKeyedArchiver archiveRootObject:myArray toFile:path]; 
    //note: myArray is an NSMutableArray, could be an NSArray 

    return success; 
} 


- (BOOL) loadData 
{ 
    BOOL success = NO; 

    NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO); 

    NSString *path = [[[pathList objectAtIndex:0] stringByAppendingPathComponent:@"data.txt"] stringByExpandingTildeInPath]; 

    if((myArray = [NSKeyedUnarchiver unarchiveObjectWithFile:path])) 
    { 
     [myArray retain]; 
     success = YES; 
    } 
    else 
    { 
     myArray = [[NSMutableArray alloc] init]; 
     success = NO; 
    } 

    return success; 
} 
+0

謝謝filipe,我覺得有2個單獨的數組是最好的選擇。使用原始數組,它是在Xcode的.plist編輯器中創建的。我需要在代碼中創建第二個數組,因爲用戶將是輸入數據的人,對吧?還是有更簡單的方法來做到這一點?這是我原來的數組看起來像:http://www.box.net/shared/static/8vrur2i4r28lphlyysg5.png – Jon