2012-10-18 2 views
1

드릴 다운 테이블 앱에 대한 코드를 작성했지만 런타임 중에 만 응용 프로그램이 중단됩니다. Xcode는 앱 제작 과정에서 오류를주지 않습니다. 디버거 출력 :런타임 중 디버깅 중 문제가 발생했습니다.

2012년 10월 18일 10 : 58 : 26.513 초 [474 : C07] - [NavController setItems :] 2012년 10월 18일 10시 58분 인스턴스 0xc217a00 전송 인식 선택기> 26.515 초 [474 : C07] * 의한 캐치되지 않는 예외> 'NSInvalidArgumentException'이유 응용 프로그램 종료 '- [NavController setItems는 :] : 미정 선택기> 전송 인스턴스 0xc217a00에' * 우선 투사 호출 스택 : (0x14b8022 0xeb8cd6 0x14b9cbd 0x141eed0 0x141ecb2 0x3fbe 0xe2a1e 0x41401 0x41670 0x41836> 0xbfc9dd8 0x4872a 0x19596 0x1a274 0x29183 0x29c38 0x1d634 0x13a2ef5 0x148c195 0x13f0ff2> 0x13ef8da 0x13eed84 0x13eec9b 0x19c65 0x1b626 0x1d40 0x1cd9) 는 던져라고 종료 g 예외

저는 오류가 어디 NavController.m에 있다고 이해 생각 : BTW

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSString* path = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"]; 
    MasterViewController* root = (MasterViewController*)self.topViewController; 
    NSDictionary* thelist = [NSDictionary dictionaryWithContentsOfFile:path]; 
    root.items = [thelist objectForKey:@"Items"]; 
    root.navigationItem.title = [thelist objectForKey:@"name"]; 
} 

,이 같은 배열 상품 제조 (비 원자, 유지) NSArray를 * 항목;

답변

0

앱의 충돌 :

root.items = [thelist objectForKey:@"Items"]; 

이 줄은 단지 바로 가기를 쓰기위한 것입니다 :

[root setItems:[thelist objectForKey:@"Items"]]; 

그리고 런타임을 찾을 수있는 방법 setItems:가 없음을 뿌려줍니다. 컴파일 오류가있는 이유는 컴파일러에게 root이 클래스 MasterViewController임을 말해주기 때문입니다. 런타임에 obj-c 런타임은 NavController 클래스의 사실 root이고 NavControllersetItems: 메서드가없는 것 같습니다. 즉

,이 라인은 잘못된 것입니다 :

당신은 클래스에 대해 거짓말
MasterViewController* root = (MasterViewController*)self.topViewController; 

; self.topViewControllerNavController 클래스의 개체를 반환하지만 컴파일러에서 MasterViewController으로 처리하도록 지정하면 NavController에 대해 찾을 수없는 메서드를 호출하자 마자 실패합니다.

+0

그래서'MasterViewController * root'를'NavController'로 변경해야합니까? setItems 메소드는 어떻게 구현 될까요? 아마도 바보 같은 질문에 대해 유감스럽게 생각합니다. – user1738193

+0

@ user1738193 프로젝트의 전체 코드와 인용 된 메소드에서 수행하려는 작업을 모르는 경우, topViewController가 MasterViewController가 아님을 알 렸습니다. 코드가 1이어야한다고 말하면 오류는 다른 곳에서 발생합니다 (예 : 인터페이스 작성기 나 코드의 다른 곳에서 잘못된 개체를이 속성에 할당 한 경우). – Mecki

+0

글쎄, 인터페이스 빌더에 문제가있는 것으로 나타났습니다. MasterViewController에 잘못된 뷰를 지정했습니다. 모든 도움에 감사드립니다. – user1738193

0

문제는 아마 여기에 있습니다 :

MasterViewController* root = (MasterViewController*)self.topViewController; 

self.topViewController가 proably 가고있다 MasterViewController의 인스턴스하지만 NavController 인스턴스와 없습니다. 때문에 다음 줄의

관련 문제