2010-04-14 5 views
2

내 응용 프로그램에 UITableViewController을 확장하는보기 컨트롤러가 있습니다. 초기화 방법은 다음과 같습니다내 UITableView가 UITableViewStyleGrouped에서 UITableViewStylePlain으로 변경되는 이유

- (id)initWithCoder:(NSCoder*)coder { 
    if (self = [super initWithCoder:coder]) { 
     self.tableView = [[UITableView alloc] initWithFrame:self.tableView.frame 
                 style:UITableViewStyleGrouped]; 
    } 

    return self; 
} 

뷰가 처음로드, 그것은 UITableViewStyleGrouped로 표시합니다. 그러나 내 앱에 메모리 부족 경고가 수신되면 위의보기는 UITableViewStylePlain으로 변경됩니다. 보기/컨트롤러와 관련된 xib 파일이 없습니다. viewDidUnload 및 didReceiveMemoryWarning 방법은 간단하다 :

- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

- (void)viewDidUnload { 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 

내 질문은, 왜 테이블 스타일의 변화는 내가 메모리 경고를받을 않는 경우?

이것은 장치와 시뮬레이터에서 발생합니다. 장치가 OS 3.1.3을 실행하는 3G 아이폰이고, 시뮬레이터에서 OS 3.1이 실행 중입니다.

+0

이 문제는 기기, 시뮬레이터 또는 둘 모두에서 발생합니까? 프로젝트의 기본 SDK는 무엇입니까? 어떤 SDK를 컴파일하고 있습니까? 앱이 실행되는 iPhone OS의 버전은 무엇입니까? –

답변

4

초기화시 [super initWithCoder:coder]을 호출합니다. UITableViewController, 즉 -initWithStyle:에 대한 지정된 이니셜 라이저를 무시하는 것이 좋습니다. 아마도 [super init…]을 호출하여 테이블 뷰 컨트롤러를 생성 할 때 이미 tableView 속성이 설정되어 생성 된 것입니다. 즉, 초기화시 테이블 뷰가 생성됩니다. 그렇기 때문에 self.tableView의 값이 nil 인 경우 self.tableView.frame에 대한 전화가 작동하지 않아야합니다. 더 나은 구현 방법은 다음과 같습니다.

- (id)initWithCoder:(NSCoder*)coder { 
    if (self = [super initWithStyle:UITableViewStyleGrouped]) { 

    } 

    return self; 
} 
+0

당신이 옳다고 생각합니다. 그것은 어쨌든 말이됩니다. 하지만 이제 셀을 선택하면 didSelectCellAtIndexPath 메서드가 호출되고 새 뷰 컨트롤러가 만들어지고 [self.navigationController pushViewController : newController animated : YES]가 호출됩니다. 그러나 새 컨트롤러는 표시되지 않습니다. 나는 그 변화가 어떻게 일어날지를 볼 수 없다. 나는 약간의 기본 개념을 여기에서 놓치고있는 것처럼 느낀다. – casper

+0

'self.navigationcontroller'의 결과는 무엇입니까? 내비게이션 컨트롤러가 있습니까? 그렇지 않은 경우이 테이블보기 컨트롤러를 루트보기 컨트롤러로 사용하여 테이블보기 컨트롤러를 만듭니다. –

+1

self.navigation 컨트롤러는 실제로 nil입니다. 그 시점에서 나는 모든 것을 뒤로 물러났다. 나는 원래의 코드를 작성하지 않았고 내가 말할 수있는 한 initWithCoder :를 init 메소드로 사용하지 않아도된다. 그래서 모든 init 메소드를 주석 처리하고 xib 파일을 만들고 그 안에 그룹화 된 테이블 스타일을 설정했습니다. 그런 다음 IB의 UITabBar에 연결했습니다. 이제 모든 것이 작동합니다. 그래도 내 원래 질문에 대한 대답은 정확 했으므로 고맙습니다. – casper

관련 문제