我的 iphone/ipad 项目中有这个简单的 json 文件。
{"initial_page" : Page_Selected}
Page_Selected
是一个NSInteger
我想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);
最后一行返回 me (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 文件时权限被拒绝。