1

我的 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 文件时权限被拒绝。

4

4 回答 4

1

问题解决了:主要的错误概念是在主包中写入和/或修改文件。现在我在NSDocumentDirectory

这样,我就不会出错,并且可以直接在 iPhone 中/从 iPhone 中读取/写入数据。

我遵循了本指南:链接当然我使用 json 作为过滤器而不是 pdf。

于 2012-08-17T14:57:18.017 回答
0

放在函数NSDataWritingFileProtectionNoneoptiondataWithJSONObject现在它只在模拟器上对我有用。

于 2012-08-17T06:56:33.900 回答
0

首先,您应该通过将初始值指定Page_Selected为数字来使您的 json 有效,否则您将无法解析它。例如{"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 回答