2011-03-16 43 views
0

我有tabbarcontroller應用程序。在第一個標籤本身,我有桌面視圖。我沒有添加任何內容到NIB文件。我剛剛創建了UITableViewController的子類。我的細胞是自定義的。它確實顯示了具有適當值的表格。使用pushviewcontroller後,TableView不滾動

但是在didSelectRow:方法中,我叫pushViewController。一旦我從pushViewController中按下回到原始屏幕並開始滾動,我的應用程序就會終止。

任何人都可以幫我解決這個問題嗎?

//代碼

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

{ 

static NSString *CellIdentifier = @"Cell"; 

CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) 

{ 

cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; 

} 

// Configure the cell... 

    NSString *TitleValue = [listOfTitles objectAtIndex:indexPath.row]; 

    cell.primaryLabel.text = TitleValue; 

NSString *DateValue = [listOfDates objectAtIndex:indexPath.row]; 

    cell.secondaryLabel.text = DateValue; 



NSString *descValue=[listOfDesc objectAtIndex:indexPath.row]; 

cell.thirdlabel.text = descValue; 



if([unreadFlag objectAtIndex:indexPath.row] == @"0") 

{ 

cell.primaryLabel.font = [UIFont boldSystemFontOfSize:15.0]; 

} 

else { 

cell.primaryLabel.font = [UIFont systemFontOfSize:15.0]; 

} 


return cell; 

//[CustomCell release]; 

} 


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

{ 

return 105; 

} 


#pragma mark - 

#pragma mark Table view delegate 


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

CustomCell *testcell = [tableView cellForRowAtIndexPath:indexPath]; 

testcell.primaryLabel.font = [UIFont systemFontOfSize:15.0]; 

[unreadFlag replaceObjectAtIndex:indexPath.row withObject:@"1"]; 

selectedNS = [listOfIds objectAtIndex:indexPath.row]; 

//Initialize the detail view controller and display it. 

DetailViewController *dvController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:[NSBundle mainBundle]]; 

dvController.selectedNS=selectedNS; 

[self.navigationController pushViewController:dvController animated:NO]; 

[dvController release]; 

dvController = nil; 



testcell.primaryLabel.font = [UIFont systemFontOfSize:15.0]; 

[testcell release]; 

} 

- (UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath { 

//return UITableViewCellAccessoryDetailDisclosureButton; 

return UITableViewCellAccessoryDisclosureIndicator; 

} 


- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath { 

[self tableView:tableView didSelectRowAtIndexPath:indexPath]; 

} 

謝謝

安基塔

+0

一些代碼真的會有所幫助。如果你不介意。 – visakh7 2011-03-16 07:05:13

+0

你可以請張貼堆棧跟蹤? – hennes 2011-03-16 07:12:41

+0

你們有誰能解決這個問題? – Anks 2011-03-16 08:36:40

回答

0

沒有看到我敢打賭,這是你的選擇小區的雙重釋放的堆棧跟蹤。你從的tableView這樣獲取它

CustomCell *testcell = [tableView cellForRowAtIndexPath:indexPath]; 

,而不是將其保留,然後在方法結束時,你將要發佈一個對象,你並不擁有

[testcell release]; 

那麼您什麼時候返回並開始滾動,tableView可能會嘗試釋放單元崩潰,因爲雙釋放。只是不要釋放你不擁有的東西(創建,分配,複製,保留)。

+0

完美。它通過任何方式解決了錯誤。我給了不同的標識符,然後它也起作用,甚至通過它的工作方法。非常感謝:) – Anks 2011-03-16 11:01:42

+0

表格視圖中的單元格標識符和出列是爲了避免爲同一類重新分配內存。例如通過出隊,您將獲得已經設置的CustomCell,然後您必須根據新行設置其屬性。不同的標識符應該用於不同的單元類。 – tsakoyan 2011-03-16 13:56:41

0

問題解決了。我只需要爲每個單元格給出不同的CellIdentifier。所以我將代碼更改爲

NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d", i]; 

其中,i是變量聲明在頭文件中,賦值爲零。