ここから本文です

objective-c初心者です。 変更したデータをplistに書き込むにはどうしたらいいで...

tom********さん

2014/4/2811:56:38

objective-c初心者です。
変更したデータをplistに書き込むにはどうしたらいいでしょうか。
よろしくお願いいたします。
plistは以下のとおりです。
ここでpNoが2のspeedを1400に変える方法を教えてください。

<plist version="1.0">
<array>
<dict>
<key>pNo</key>
<string>0</string>
<key>speed</key>
<string>1000</string>
</dict>
<dict>
<key>pNo</key>
<string>1</string>
<key>speed</key>
<string>1100</string>
</dict>
<dict>
<key>pNo</key>
<string>2</string>
<key>speed</key>
<string>1200</string>
</dict>
</array>
</plist>

読み込みは以下のような感じで出来ました。

NSString* path = [[NSBundle mainBundle]pathForResource:@"prop"ofType:"plist"];
NSArray* Array = [NSArray arrayWithContestsOfFile:path];
for(NSDictionary*str in Array)
{
int iPtn =[[NSString stringWithFormat:@"%@",[str objectForKey:@"pNo"]] intValue];
if(iPtn==2)
{
//処理
}
}

補足早々のご回答に感動しました。
NSData* data = [NSData dataWithContentsOfFile: path];
NSMutableArray *array = [NSPropertyListSerialization propertyListWithData: data options:
NSPropertyListMutableContainersAndLeaves format: NSPropertyListXMLFormat_v1_0 error:NULL];
でデータ変換がうまくいきません。それとspeedの1200を1400にする
//処理
の所がどうしてもわかりません。
お恥ずかしいですが、よろしくお願いします。

閲覧数:
748
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

har********さん

編集あり2014/4/2816:26:57

Plistの読み込みはできるのに、それを書き換えできないのは、読み込んでNSArrayにしているからです。書き換え可能にするには、NSMutableDictionaryを要素とする、NSMutableArrayにしなければいけません。
ではどうすればいいのかというと、NSPropatyListSerializationクラスを使います。

NSString* path = [[NSBundle mainBundle]pathForResource:@"prop"ofType:"plist"];
NSData *data = [NSData dataWithContentsOfFile: path];
NSMutableArray *array = [NSPropertyListSerialization propertyListWithData: data options: NSPropertyListMutableContainersAndLeaves format: NULL error: NULL]; // 補足が付いた後に修正しています。

for(NSMutableDictionary *dict in array)
{
int iPtn =[[NSString stringWithFormat:@"%@",[dict objectForKey:@"pNo"]] intValue];
if(iPtn==2) {
// 処理
}
}

補足に対して:
こちらのNSPropertyListSerializationクラスの記憶違いがあって、コードに誤りがありましたので、修正しました。

> それとspeedの1200を1400にする
> //処理
> の所がどうしてもわかりません。

※リソース内([NSBundle mainBundle])のリソースの書き換えはしないでください。おそらく書き換え不可になっているはずですが。
アプリのフォルダに「Documents」フォルダが用意されていますから、そこに変更後のPlistファイルを保存するようにしましょう。

「どうしても」わからないのなら、プログラミングそのものをあきらめてください。あなたがいっているのは「カレーを作りたいんですが、包丁の使い方が、どうしてもわかりません」と言っているのと同じ。
C言語の入門書、Objective-C、iOSの入門書を最初から勉強しなおせば、「どうしても」わからないということにはなりません。あ、あなたには、以前「初歩から勉強しなおせ」ってアドバイスさしあげてますよね?
とりあえず、クラスリファレンスに目を通すことから始めてください。

NSMutableDictionary Class Reference
https://developer.apple.com/library/ios/documentation/cocoa/referen...

質問した人からのコメント

2014/4/28 16:59:29

解決しました。自分でもこんなに早く解決するとはびっくりしました。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる