2013-07-17 1 views
1

Objective-C 응용 프로그램에서 json 파일을 읽으려고하지만 불행히도 RuntimeException이 발생합니다. 정확한 오류는 다음과 같습니다Objective-C에서 JSON 파일을 읽으려고합니다.

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'data parameter is nil' 

내 JSON 파일이 "Transactions.json

라고
[{ "transaction": "300001", "date": "1/1/11", "type": "ABC", "status": "State1" }, 
    { "transaction": "300002", "date": "2/2/12", "type": "XYZ", "status": "State2" }, 
    { "transaction": "300003", "date": "3/3/13", "type": "ABC", "status": "State3" }, 
    { "transaction": "300004", "date": "2/2/12", "type": "XYZ", "status": "State2" }, 
    { "transaction": "300005", "date": "3/3/13", "type": "ABC", "status": "State3" }, 
    { "transaction": "300006", "date": "2/2/12", "type": "XYZ", "status": "State2" }, 
    { "transaction": "300007", "date": "3/3/13", "type": "ABC", "status": "State3" }, 
    { "transaction": "300008", "date": "2/2/12", "type": "XYZ", "status": "State2" }, 
    { "transaction": "300009", "date": "3/3/13", "type": "ABC", "status": "State3" }, 
    { "transaction": "300010", "date": "4/4/14", "type": "XYZ", "status": "State4" } ] 
파일에 읽고

내 방법은 다음과 같습니다

int main(int argc, const char * argv[]) 
{ 

    @autoreleasepool { 
     // Create the managed object context 
     NSManagedObjectContext *context = managedObjectContext(); 

     // Custom code here... 
     // Save the managed object context 
     NSError *error = nil; 
     if (![context save:&error]) { 
      NSLog(@"Error while saving %@", ([error localizedDescription] != nil) ? [error localizedDescription] : @"Unknown Error"); 
      exit(1); 
     } 

     NSError *err = nil; 
     NSString *dataPath = [[NSBundle mainBundle] pathForResource:@"Transactions" ofType:@"json"]; 
     NSLog(@"Hello: %@", dataPath); 
     NSArray *transaction = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:dataPath] options:kNilOptions error:&err]; 

       NSLog(@"Transaction list: %@", transaction); 

    } 

    return 0; 
} 

내가 돈 무엇 ' JSON 파일을 읽을 때 NSData 객체가 null로 올라간다는 사실을 이해하고 있습니다. 내가 뭘 잘못하고 있는지 알 수 있습니까? 그냥 기록을 위해 JSON 파일의 불필요한 공백을 검사 해 보았습니다. 시도한 placin 내 응용 프로그램 폴더 내의 다른 위치에있는 JSON 파일. 아무 것도 작동하지 않았습니다.

미리 답변 해 주신 모든 분께 감사드립니다.

+0

이 iOS 또는 OSx입니까? "dataPath"에 대해 기록 된 값은 무엇입니까? –

+0

그리고 일반적으로 : 작업을 함께 연결하지 마십시오. NSData 포인터를 임시 변수에 할당 한 다음 해당 임시 변수를 사용하여 NSJSONSerialization을 제공하십시오. 디버깅을 훨씬 간단하게 만듭니다. –

+0

"err"의 내용을 기록하십시오. –

답변

2

귀하의 소스 코드와 귀하의 의견에서 나는 응용 프로그램이 "명령 줄 도구"로 작성되었다고 가정합니다. 이 경우 "Target MemberShip"체크 박스는 실제로 JSON 파일과 같은 사용자 정의 리소스 파일에 대해 비활성화 된 입니다. 해결 방법으로

:

  • 이동 대상의 "빌드 페이즈"로 설정합니다.
  • "빌드 단계 추가"를 클릭하고 "파일 복사 추가"를 선택하십시오.
  • 새 빌드 단계에서 +을 클릭하고 JSON 파일을 선택하십시오.

명령 줄 도구의 경우 "대상"을 선택하는 데 문제가없는 것 같습니다. "대상 : 리소스"로 테스트했습니다. JSON 파일은 실행 파일이 들어있는 동일한 디렉토리에 복사됩니다. 지금

[[NSBundle mainBundle] pathForResource:@"Transactions" ofType:@"json"]; 

경로를 반환해야하며 응용 프로그램에서 파일을 읽을 수 있습니다.

관련 문제