내 iphone/ipad 프로젝트에이 간단한 json 파일이 있습니다.NSJSONSerialization - json 파일로 개체 수정
{"initial_page" : Page_Selected}
Page_Selected
내가 UIPickerView
통해 "initial_page"
의 값을 수정하려는 NSInteger
입니다. 그렇게하는 방법?
물론 난 이미 UiPickerWiew
선택 부분을 한 적이과 JSON 수정에 대해, 나는
-(void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponents:(NSInteger)component{ }
함수로를 기록합니다.
작업이 [[jsonParsed setInteger:row forKey:@"initial_page"]
일 수도 있지만 이런 식으로 디버거가 "인식 할 수없는 선택기 보내기"예외를 반환합니다.
"initial_page"
키를 사용하여 json
매개 변수를 수정해야하는 부분 만 필요합니다.
누구든지 나를 도와 줄 수 있습니까?
그게 내가 가진거야.
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 파일을 작성할 때 허가가 거부되었습니다.
내가 제안한 것을 포함하여 편집했지만 값을 변경하지 않습니다 ... –
실제로 파일을 디스크에 저장하지 않으므로 사전을 JSON NSData로 serialize하고 다음 중 하나를 사용하십시오. 'writeToFile :'또는'writeToURL :'메소드 –
내 변경 사항보기 및 다른 답변보기 ... –