2010-11-19 5 views
1

내 응용 프로그램 용 JSON을 구문 분석하려고합니다. "name"값을 설정하려고하면 unrecognized selector sent to instance' 오류가 발생합니다.
이 오류가 발생하는 코드의 라인 :CoreData, JSON "인식 할 수없는 셀렉터가 인스턴스로 전송되었습니다."

json_object: { 
draftstatus = "isdraftfull.php"; 
getcard = "getcard.php"; 
getpack = "getpack.php"; 
imageextension = ".jpg"; 
images = "images/small/"; 
joindraft = "joindraft.php"; 
joindraftmenu = "getjoindraftmenu.php"; 
login = "loginasuser.php"; 
name = "the server"; 
passpack = "passpack.php"; 
playerdraftstatus = "getplayerdraftstatus.php"; 
signup = "signup.php"; 
userexists = "checkifuserexists.php"; 
usesetidforimagepath = false; 
} 

Server.h 외모 : self.name = [json_object objectForKey:@"name"];

내 JSON은 다음과 같습니다 (JSON_OBJECT가있는 NSDictionary와 "자기"입니다 CoreData의 개체입니다) 다음과 같이하십시오 :

#import <CoreData/CoreData.h> 
#import "JSON.h" 

@interface Server : NSManagedObject 
{ 
    NSMutableData *responseData; 
} 

@property (nonatomic, retain) NSString * playerdraftstatus; 
@property (nonatomic, retain) NSString * signup; 
@property (nonatomic, retain) NSNumber * usesetidforimagepath; 
@property (nonatomic, retain) NSString * login; 
@property (nonatomic, retain) NSString * imageextension; 
@property (nonatomic, retain) NSString * userexists; 
@property (nonatomic, retain) NSString * getcard; 
@property (nonatomic, retain) NSString * passpack; 
@property (nonatomic, retain) NSString * draftstatus; 
@property (nonatomic, retain) NSString * joindraftmenu; 
@property (nonatomic, retain) NSString * getpack; 
@property (nonatomic, retain) NSString * joindraft; 
@property (nonatomic, retain) NSString * images; 
@property (nonatomic, retain) NSNumber * isdefaultserver; 
@property (nonatomic, retain) NSString * root; 
@property (nonatomic, retain) NSString * name; 

- (id) initWithWebAddress:(NSString *) address; 
- (id) initWithWebAddressAsyn:(NSString *) address; 
- (void) fillFromJSON:(NSDictionary *) json_object; 
- (void) saveServer; 

@end 

나는 며칠 전부터 일했다고 생각하지만, 기억이 안납니다. 오늘 작업을 시작했을 때 "루트"개체를 추가했습니다. 오류없이 컴파일되지만 해당 json을 구문 분석하지 않습니다.

도움 말?

편집
나는 name = "the server"로 돌아와하기 위해 JSON을 변경하고 나는이 NSLog(@"json_object name: %@", [json_object objectForKey:@"name"]); 같은 로그가 나는 String 형이다 self.name 해당 설정하려고 할 때 json_object name: the server는하지만 난 여전히 같은 오류가 말한다 로그인 할 때 .
때로는 이름 내부의 값이 항상 따옴표로 묶여 있지 않으며, [json_object objectForKey:@"name"]의 로그에서 볼 수있는 JSON의 로그 버전을 따옴표없이 표시 할 때주의해야합니다. 그게 문제이고 그 일은 왜 일어나는 것입니까? 내가 출력하는 웹 페이지에서 곧바로 json을 보면 값 주변에 항상 인용 부호가 있습니다.

EDIT 2
전체 오류는 다음과 같다 :

-[Server setName:]: unrecognized selector sent to instance 0x61036e0 
2010-11-19 15:46:10.113 TCGDraft[57953:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Server setName:]: unrecognized selector sent to instance 0x61036e0' 
*** Call stack at first throw: 

편집
3 나는 "자기"에 NSLog를하고이 self: <Server: 0x6143190> (entity (null); id: (null) ; data: {})
내가 더이 다시 온다 무엇인가 실마리가 있다면 그것은 정상입니다. 이것은 CoreData 객체이며 어떻게 든 엉망이되었을 것 같은 느낌이 들었습니다.

EDIT 4
난 다시 가서 같은 CoreData에서 서버 개체 작성하는 코드를 보았다 : 나는 지금 너무 그것을 EXC_BAD_ACCESS을 말한다 오류가 발생하는 것을 실행하면

Server *server = [NSEntityDescription 
        insertNewObjectForEntityForName:@"Server" 
        inManagedObjectContext:context]; 

을 어떻게 든 그 물체가 엉망이 된 것처럼 보이지만 ... 나는 어떻게해야할지 모르겠다.

5
오른쪽, 그래서 나는 완전히 내 사용자 지정 코드로 Server.h 및 Server.m 삭제 된 파일을 편집, 난 CoreData 개체에서 그들을 다시 내가 "편집 4"에 게시 된 해당 코드를 시도하고 I EXC_BAD_ACCESS ....에 대해서도 같은 에러가 나옵니다. 그래서 앞으로 Forward보다는 BACKWARD로 넘어갔습니다.

+0

[JSON_OBJECT objectForKey "이름"@]; null 값을 리턴합니다. 확인해 봐. – jfalexvijay

+0

"json_object"아래의 "name"이 "Default Server"라고 말하면 null 값을 반환 할 수 있습니까? –

+0

json_object가 NSDictionary입니까? NSLog (@ "class : % @", [json_object class])를 수행하십시오. 그리고 그것이 무엇을 반환하는지보십시오. –

답변

3

먼저 NSManagedObject를 JSON 구문 분석기 메서드에서 완전히 분리하는 것이 좋습니다. JSON 데이터의 모든 비동기 로딩 및 처리는 관리 객체 속성에 할당 할 수있는 별도의 객체로 처리해야합니다.

#import <CoreData/CoreData.h> 

@interface Server : NSManagedObject 
{ 
} 

@property (nonatomic, retain) NSString * playerdraftstatus; 
@property (nonatomic, retain) NSString * signup; 
... 
@property (nonatomic, retain) NSString * name; 

@end 

둘째, 그렇지 않으면 CoreData가 조작하고 당신이 시도 할 때 EXEC_BAD_ACCESS 예외를 얻고있는 이유는 대부분의 (당신을 위해 이러한 개체를 저장하고 저장할 수 없습니다 @synthesize에 다시 @dynamic 값을 변경하지 마십시오 그 물체!).

@dynamic *playerdraftstatus; 
@dynamic *signup; 
... 
@dynamic *name; 

이제 마지막으로

Server *server = [NSEntityDescription 
        insertNewObjectForEntityForName:@"Server" 
        inManagedObjectContext:context]; 

server.name = [json_object valueForKey:@"name"]; 

그리고 즉 서버 개체를 만드는 곳 컨트롤러에서 속성 값을 할당하려고, 당신이 이제까지 CoreData이 후 모양으로 서버 개체를 해제하지 않습니다 확인 당신을 위해 자동으로.

PS : 당신이 당신의 데이터 모델을 변경 한 경우 그렇지 않으면 당신이 상점 유형이 전화 등

을 기존과 호환되지 않는 없다는 오류 메시지가 표시됩니다 재설정/아이폰/시뮬레이터에서 응용 프로그램을 제거 할 수 있습니다

다른 오류 메시지가 나타나면 어떻게 생각하는지 알려주십시오.

건배

로저

+0

3 시간 전에 어디 있었습니까? 그것은 내가 결국 알아 내었던 거의 모든 이슈였다. –

0

문제는 서버 클래스에 setName 메서드가 없다는 것입니다. json 데이터와 아무 관련이 없습니다. 속성을 종합하거나 필요한 방법을 정의하십시오.

+0

이것은 CoreData xcdatamodel 파일에서 엔티티 "서버"를 선택하고 "파일 -> 새 파일"을 클릭 한 다음 "관리 객체 클래스"를 선택하고 프롬프트를 따라 생성 된 객체입니다. 의미, XCode는이 파일을 만들었습니다. 몇 가지 필수 메소드가 없다면 심각한 문제가있었습니다. 이것은 Objective-C와 XCode에 대해 싫어하는 바보 같은 것들이다. –

+0

왜 우리에게 유머가없고 Server.h에 무엇이 게시 되나요? –

+0

@CrystalSkull : 초기 게시물에 추가되었습니다. –

관련 문제