1

この単純なjsonファイルがiphone/ipadプロジェクトにあります。

{"initial_page" : Page_Selected}

Page_SelectedNSInteger

UIPickerViewの値を使用して変更したい"initial_page"。どうやってするか?

もちろん、私はすでにUiPickerWiew選択部分を実行しました。jsonの変更については、

-(void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponents:(NSInteger)component{ }

働き。

たぶん、その仕事をする関数はそうです[[jsonParsed setInteger:row forKey:@"initial_page"]が、このように、デバッガーは「認識されないセレクターが送信されました」という例外を返します。

キーとしてjsonパラメータを変更する部分だけが必要です。"initial_page"

誰かが私を助けることができますか?


それが私が得たものです。

NSError *jsonParsingError = nil;
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Config" ofType:@"json"];
NSMutableDictionary *configJson = [NSJSONSerialization
                JSONObjectWithData:[NSData dataWithContentsOfFile:filePath]
                options:NSJSONReadingMutableContainers error:&jsonParsingError];

[configJson setValue:[NSNumber numberWithInt:row] forKey:@"initial_page"];

NSLog(@"%@",jsonParsingError);

最後の行は私(null)を返すので、jsonファイルは問題ありません。

しかし、印刷する[configJson objectForKey:@"inital_page"]と変化が見られます...では、永続化するための「コミット」または「保存」コマンドのようなものはありますか?


次の提案:

NSData * modified = [NSJSONSerialization dataWithJSONObject:configJson options:NSJSONWritingPrettyPrinted error:&jsonParsingError];

[modified writeToFile:filePath options:NSDataWritingAtomic error:&jsonParsingError];
NSLog(@"returned error: %@", [jsonParsingError localizedDescription]);

繰り返しますが、最後の行は私を返します(null)が、ファイルに変更が見つかりません


変更後、の変更を保存できますが、initial_pageこれiPhone/iPad Simulatorは実際のデバイスのデバッグでは機能せず、機能しません。

これが私がすることです:

if([modified wirteToFile:filePath options:NSDataWritingFileProtectionNone error:&jsonParsingError])
   NSLog(@"writing ok")
else
   NSLog(@"not ok with error :%@",jsonParsinError);

Iphone simulator最後の4行には問題はありませんが、物理的に実行すると、最後の行iPhoneは次のようになりNSLogます。

"not ok with error : Error Domain=NSCocoaErrorDomain Code=513 The Operation Could not be completed. Operation not permitted"

jsonファイルの書き込みで許可が拒否されたようです。

4

4 に答える 4

1

問題は解決されました。主な間違った概念は、メインバンドル内のファイルを書き込んだり変更したりすることです。今私はこれをNSDocumentDirectory

このようにして、エラーは発生せず、iPhoneとの間で直接データを読み書きできます。

私はこのガイドに従いました:リンクはもちろん、pdfの代わりにjsonをフィルターとして使用します。

于 2012-08-17T14:57:18.017 に答える
0

まず、の初期値を数値として指定してjsonを有効にする必要がPage_Selectedあります。そうしないと、解析できません。たとえば、{"initial_page" : -1}それが無効な初期値であり、誤って使用しないことを確実に知っているためです。

次に、解析するときに、メソッドNSJSONReadingMutableContainersのオプションとして指定します+JSONObjectWithData:options:error:

次に、取得したインスタンスを実際に変更できますNSMutableDictionary

[jsonDictionary setValue:[NSNumber numberWithInt:row] forKey:@"initial_page"]
于 2012-08-16T11:17:08.197 に答える
0

永続化するための一種の「コミット」または「保存」コマンドはありますか?

JSONをファイルに書き戻す必要があります。

NSJSONSerializationの-dataWithJSONObject:options:error:メソッドを使用してNSDataを作成し、それをファイルに書き込みます。アプリバンドル内のリソースに書き込もうとしないでください。

于 2012-08-16T16:11:48.833 に答える
0

関数に入れるNSDataWritingFileProtectionNoneようにoptiondataWithJSONObject今ではシミュレーターでのみ動作します。

于 2012-08-17T06:56:33.900 に答える