2012-02-24 29 views
1

申し訳ありませんが、私は同様の質問を見ましたが、私には完全な答えがないようです。そして、私はそれを整理して、人々が私や貧しい人の英語を嫌うことはないようにしています。
私はストーリーボードとARCでXcode 4.2を使用しています
私のplistファイルから読み取ることができます。私の仕事は単に更新された値を私のplistファイルに書き戻すことです。NSDictionaryオブジェクトを使用してplistファイルに書き込む

私のplistは、メインフォルダの "support files"サブフォルダ(ストーリーボードは動作します)に含まれています。ファイルはGlobal.plistと呼ばれ、GlobalValue2はファイルタイプ文字列の要素です。

ので、読み込みファイルの一部は、この

NSString *plistfile = [[NSBundle mainBundle] pathForResource:@"Global" ofType:@"plist"]; 
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:plistfile]; 

FirstValueTextBox.text = [[dict valueForKey:@"GlobalValue1"] stringValue]; 

のように見えますが、いくつかの便利なユーチューブビデオが正常に動作しますから、それを学びます。値を自分のテキストボックスに更新します。

実際の問題は、plistファイルを書き戻すときに発生します。私は

NSString *plistfile = [[NSBundle mainBundle] pathForResource:@"Global" ofType:@"plist"]; 
NSMutableDictionary *dict = [NSMutableDictionary 
dictionaryWithContentsOfFile:plistfile]; 

[dict setValue:@"ABC" forKey:@"GlobalValue2"]; 
SecondValueTextBox.text = [dict valueForKey:@"GlobalValue2"]; 
[dict writeToFile:plistfile atomically:YES]; 

次しようとすると、結果は私が実際に更新された値は、2番目のテキストボックスにポップアップを見ているが、plistファイルは変更されません。 NSDictionaryのオブジェクト:

次は私の質問のブレークダウンと私はNSDictionaryの(ないNSMutableDictionary)を使用し、私の推測
(ランタイムでのクラッシュ)のsetValueを呼び出そう問題

  1. のための私の推測ですそれ自体は読み込み専用ですので、私が値を付け加えると私はクラッシュします。しかし、コーディング時にエラーが出るのはなぜですか?オブジェクトが読み込み専用の場合

  2. 私はNSMutableDictionaryを使用してsetValueを呼び出すことができます。それは私をクラッシュさせず、 "SecondValueTextBox.text = [dict valueForKey:@" GlobalValue2 "];で更新された値を呼び出すと、それは本当に私に更新された値を返します。 plistファイルの内容は変更されません。今私が持っている結果はどれですか。
    私の推測:ここでいくつかの検索の後、私は "サポートファイル"も読んでいると思う。純粋な推測は、誰かがそれについて直接話すのを見ました。

  3. 私はもう少し上の方に移動しようとしましたが、読んだり書いた場所であるXcodeの「ドキュメントフォルダ」について話している人もいます。私は人々もそのフォルダにアクセスするコードを書くことについて話すと思います。誰かがここにコードを表示することはできますか?

  4. 私の最後の質問は、 "ドキュメントフォルダ"に自分のXcodeを接続することができますか(実際のファイルのフォルダ構造は私が考えるXcodeとは異なります)。そのので、私は見ることができますし、テストのために私のplistファイルを編集し、人々は私の推測が正しいか間違っているとある私に言うことができる場合、私は、私はあまり理解されるであろう

コードやものを使用せずに、実際の結果を見ることができます私の3と4の質問に答えてください。

答えて

4

plistに変更を保存するには、アプリケーションの起動時にリソースバンドルからドキュメントのダクトにコピーする必要があります。次に、ドキュメントのplistを使用して読み書きします。この質問はあなたの誰にまっすぐ進むようであれば

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSError *error; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

NSString *plistPath = [documentsDirectory stringByAppendingPathComponent:@"Global.plist"]; 

if ([fileManager fileExistsAtPath:plistPath] == NO) { 
    NSString *resourcePath = [[NSBundle mainBundle] pathForResource:@"Global" ofType:@"plist"]; 
    [fileManager copyItemAtPath:resourcePath toPath:plistPath error:&error]; 
} 
+0

申し訳ありません:ここで

は、ファイルをコピーすることができる方法です。 NSDocumentDirectoryまたはドキュメントフォルダ(または何でもtmpフォルダ)1.実行時にのみ存在しますか? 2.私は展開する必要があるデバイス内で見つけるだけです。だから私は開発時間中にplistを追加することはできません?または3.それは読み書きフォルダですが、サポートフォルダはコピーされていません。それの後ろに何か他の理由がありますか? –

関連する問題