2014-02-16 66 views
0

我正在使用此代碼從本地(在XCode項目中).plist文件中讀取數據。如何獲取新的.plist數據

NSError *error; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"GameData.plist"]; 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    if (![fileManager fileExistsAtPath: path]) 
    { 
     NSString *bundle = [[NSBundle mainBundle] pathForResource:@"GameData" ofType:@"plist"]; 

     [fileManager copyItemAtPath:bundle toPath: path error:&error]; 
    } 

    gameData = [[NSMutableDictionary alloc] initWithContentsOfFile: path]; 

和它的工作很大的開始,但現在我發現,當我通過我的遊戲使用一個版本,在一開始就存在的的.plist文件的模擬器的執行代碼,而新領域我在新的GameData.plist文件中沒有出現。

我認爲這是因爲如果文件已經存在,它不會再次獲取數據?但那麼我如何獲得.plist文件的新版本?我試圖刪除if語句,但我得到一個運行時錯誤,說文件已經存在。

+0

檢查'copyItemAtPath:error:'的返回值。如果它返回'NO',則記錄'error'。 – rmaddy

+0

我將忽略整個字符串,但它包含此「可可錯誤516」。和「操作無法完成。文件存在」,這顯示在copyItemAtPath行。 – Phil

+0

這沒有意義。您檢查它是否存在,並且只有在不存在時才嘗試複製。所以你不應該得到關於現有文件的錯誤。 – rmaddy

回答

0

聽起來你需要設置一個版本系統。但是,將文件從文件夾複製到文檔文件夾的唯一原因是您可以對其進行編輯,因此您需要考慮如何合併文件夾中的更新文件和文檔文件夾中的用戶添加。

一旦您有合併文件的計劃,那麼您可以更改您的if語句,以便它不會檢查文件是否已存在(如果存在,則需要在刪除之前將其刪除),但也考慮版本。您可能希望將當前複製的版本號存儲爲用戶默認值,並向版本庫中的文件添加版本號。您可能還想將用戶修改後的數據保存在不同的文件中,並將其用作覆蓋。

+0

謝謝,但我所要做的就是從.plist文件中獲取數據來設置我的遊戲,這就是我所要做的不時有.plist數據,我需要遊戲才能加載新的更新.plist文件,這都是:) – Phil

+0

爲什麼要複製它呢?剛從包中讀入plist ... – Wain

+0

但是這不是從docs文件夾中讀取的嗎? gameData = [[NSMutableDictionary alloc] initWithContentsOfFile:path]; ?因爲如果這樣做不起作用,我還是會得到舊版本。 – Phil