我在我的iphone/ipad項目中有這個簡單的json文件。NSJSONSerialization - 將對象修改爲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);
最後一行返回我(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文件時被拒絕的權限。
我編輯了包括你的建議,但它不會改變值... – 2012-08-16 14:50:01
它實際上並沒有將文件保存到磁盤,可能你想要將字典序列化回JSON'NSData'並使用其中一個'writeToFile:'''或'writeToURL:'方法 – 2012-08-17 09:57:55
看到我的更改和其他答案... – 2012-08-17 13:59:34