2012-03-02 65 views
0

正如你可以從標題中看到的,我基本上想更新一個plist。實際上,應用程序用戶將在數據字段中鍵入他的數據,我會將它們保存在plist中。他可以添加儘可能多的物體,他喜歡。 我已經爲該員工嘗試了大量不同的代碼,並且他們都沒有工作。首先,來看看我的plist(我提出你的XML代碼,所以你可以把它理解)將數據添加到plist而不刪除以前的數據

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
    <array> 
     <dict> 
      <key>name</key> 
      <string>TEST</string> 
      <key>code</key> 
      <string>TEST</string> 
      <key>longitude</key> 
      <integer>22</integer> 
      <key>latitude</key> 
      <integer>10</integer> 
     </dict> 
    </array> 
</plist> 

這僅僅是一個簡單的條目。現在這裏是我使用的lates代碼,但我沒有運氣

NSMutableDictionary *newBuilding = [NSMutableDictionary alloc]; 
    [newBuilding setValue:@"Test1" forKey:@"name"]; 
    [newBuilding setValue:@"Test2" forKey:@"code"]; 
    [newBuilding setValue:@"10" forKey:@"latitude"]; 
    [newBuilding setValue:@"20" forKey:@"longitude"]; 

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

    NSString *documentsPath = [paths objectAtIndex:0]; 

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

    NSMutableArray *newArray = [NSMutableArray arrayWithContentsOfFile:plistPath]; 

    if (nil == newArray) { 
     newArray = [[NSMutableArray alloc] initWithCapacity:0]; 
    } 

    [newArray addObject:newBuilding]; 
[newArray writeToFile:plistPath atomically: YES]; 

} 

任何人都可以發現任何錯誤嗎?我已經寫了很多次,我已經檢查了每個標記,但是我沒有發現任何錯誤。我不明白爲什麼我不想工作!

非常感謝球員

+0

我剛剛讀過plist必須在文檔目錄中,以便我能夠在上面寫下它。一旦程序被加載,任何人都可以讓我知道如何將plist傳輸到文檔目錄中? – user1015777 2012-03-03 00:17:26

回答

2

對於它的價值,你永遠不會初始化newBuilding

1

我的猜測是,newArray是當你正試圖從該文件,這意味着幾件事加載它返回nil。

  • A)錯誤路徑(嘗試記錄以確認)
  • B)文件格式不
  • C)對於什麼都原因,arrayWithContentsOfFile也沒有創造一個 可變數組,因爲它應該
  • d)可能運行內存

我在它存在的真正問題的相似性排序的這些。

在一個側面說明,爲什麼不使用便捷構造[NSMutableArray array],它與您的分配代碼。

也是一個簡單NSLog(@"%@", newArray),你會得到很好地打印到控制檯,便於可視化調試數組:)

+0

問題是否有可能是我沒有在文檔文件夾中傳輸plist? – user1015777 2012-03-03 00:40:59

+0

是的,這就是A選項,不好的路徑意味着你提供的路徑是無效的。此外,很好的大衛,newBuilding從來沒有接到過它的init方法的調用。 – 2012-03-03 23:52:52