2010-02-20 5 views
0

이 문제의 원인은 무엇입니까?그룹화 된 UITableView는 단 한 번만 표시됩니다.

IB에 추가 한 그룹화 된 tableView가 있습니다. 2 그룹. 각 그룹에 3 행.

내 앱을 처음 실행하면 잘 표시됩니다. (그래서 나는 내가 뭔가를하고 있음을 알고있다. 나는 최소한 (위임자, 데이터 소스, IBOutlet 및 연결이 올바르게 설정되었음을 의미하지 않겠는가?)

하지만 내가 호출하는 버튼을 클릭하면 그냥 충돌합니다.

처음에는 그룹 수, 행 수 또는 내 dataSource (단지 작은 NSMutableArray)의 데이터 변경으로 인해 발생했다고 생각했습니다.

아무런 데이터도 바꿀 때도 같은 일이 발생합니다. 처음으로 tableView가 제대로 표시되면 잘 작동합니다. 하지만 [myTable reloadData]으로 전화하면 충돌이 발생합니다. (데이터가 변경되었는지 여부)

나는 최소한의 베어 본 (barebones) 코드를 제거했다.이 버그를 찾으려고 노력했다.

 
-(IBAction) reloadTable:(id)sender 
{ 
    if(myTable == nil) 
     NSLog(@"myTable is nil"); 
    else 
     [myTable reloadData]; 
} 

여기에 "오류"입니다 (전혀 도움) : 여기

 

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellIndentifer = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIndentifer]; 

    if(cell == nil) 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIndentifer] autorelease]; 

    cell.textLabel.text = @"Left Test"; 
    cell.detailTextLabel.text = @"Right Test"; 

    return cell; 
} 

버튼 클릭 코드의

 
[Session started at 2010-02-19 10:04:14 -0100.] 
GNU gdb 6.3.50-20050815 (Apple version gdb-967) (Tue Jul 14 02:11:58 UTC 2009) 
Copyright 2004 Free Software Foundation, Inc. 
GDB is free software, covered by the GNU General Public License, and you are 
welcome to change it and/or distribute copies of it under certain conditions. 
Type "show copying" to see the conditions. 
There is absolutely no warranty for GDB. Type "show warranty" for details. 
This GDB was configured as "i386-apple-darwin".sharedlibrary apply-load-rules all 
Attaching to process 1081. 
kill 
kill 
quit 

The Debugger has exited with status 0.(gdb) 

나도 해봤 하드 코딩 " 그룹 수 ","행 수 ","머리글 텍스트 ","발 텍스트 "및"셀 텍스트 "가 있습니다. (objectAtIndex를 계산할 때 잘못된 수학 연산이 발생하거나 충분한 원소가없는 array-dataSource가 있습니다.)

항상 동일한 문제가 발생합니다. 처음에는 문제가 없습니다. 데이터를 다시로드하려고하면 충돌이 발생합니다.

+1

버튼 클릭 방법과 정확한 오류 표시. – DyingCactus

+0

 -(IBAction) reloadTable:(id)sender { \t if(myTable == nil) \t \t NSLog(@"myTable is nil"); \t else \t \t [myTable reloadData]; } 
Susanna

+0

StackOverFlow : * 제 코멘트를 다시 포맷하십시오. * 주석에 html을 금지하십시오. * 내 의견을 "매우 짧게"제한하는 것을 중단하십시오. 으. – Susanna

답변

0

글쎄, myTable이 nil이지만 tableview가 화면에 표시되면 IBOutlet이 올바르게 연결되지 않았 음을 나타내는 매우 좋은 지표입니다. NSLog(@"%@", myTable);viewDidLoad (물론 super를 호출 한 후)라고 말하면 내기를 걸면 (null)이 콘솔에 기록됩니다.

UITableViewController를 처음로드 할 때 tableview ([self tableView]을 통해 액세스 가능)는 reloadData이 될 것이므로 한 번 작동하지만 다시로드하지 않습니다 (콘센트가 연결되지 않았기 때문에).

나는 UITableViewController을 사용하지 않는 한 콘센트를 완전히 털고 [self tableView]을 사용합니다.

+0

재부팅했습니다. 나는 '깨끗한 짓'을했다. myTable 콘센트를 연결 해제 한 다음 다시 연결했습니다. 문제는 계속됩니다. "if (myTable == nil)"코드 ... 내 단추 누르기 방법 ... 내 "myTable이 0이 아닐 수 있습니다"라는 문제를 방지 하시겠습니까? 내 NSLog() 호출은 viewDidLoad에서 제공합니다. viewDidLoad (>) 그 밖의 무엇을 시도해야합니까? – Susanna

+0

원래 '셀 할당'코드가 올바르게 보이나요? "재사용 셀"을 자동 프리 앨리어스화할 것인가? "새 셀을 만들어야합니까?" – Susanna

+0

myTable이 0이 아니더라도 ... [myTable reloadData]를 호출하는 데 전혀 문제가되지 않습니까? 그것은 tableView가 아무것도하지 않게합니다. 대신, 나는 즉시 충돌을 얻는다. – Bonnie

관련 문제