2012-03-02 24 views
0

タイトルからわかるように、私は基本的にplistを更新したいと思います。実際には、アプリのユーザーは自分のデータをデータフィールドに入力し、それらを取り出してplistで保存します。彼は好きなだけ多くのオブジェクトを追加できます。 私は、そのスタッフのために膨大な数の異なるコードを試しましたが、どれも動作しません。まず、単純なエントリーされたことを前のデータを削除せずに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> 

(あなたがそれを理解することができますので、私はあなたにXMLコードを提示しています)私の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

答えて

2

何が価値があるのに対して、あなたはnewBuildingを初期化することはありません。

1

私の推測では、あなたはいくつかの手段上にファイルからロードしようとしているときNEWARRAYがnilを返しているということです。 A)バート・パス(それが確認するためにログインしてみてください)

  • B)ファイルが悪いことが
  • べきとarrayWithContentsOfFileが 可変配列を作成していない、これまでどのような理由で、
  • C)にフォーマットされ

    • D)メモリが不足している可能性があります。

    これらは実際の問題である可能性があります。

    便利なコンストラクタ[NSMutableArray array]を使用しないと、割り当てコードと同じことが起こります。

    またシンプルNSLog(@"%@", newArray)、あなたは配列がきれいに簡単に視覚的なデバッグ用コンソールに出力されます:)

  • +0

    ドキュメントフォルダにplistを転送していないという問題が発生する可能性はありますか? – user1015777

    +0

    さて、オプションAは、あなたが提供しているパスが無効であることを意味する悪いパスです。また、良いキャッチDavid、newBuildingはinitメソッドを呼び出すことはありませんでした。 –

    関連する問題