2014-10-20 73 views
0

我試圖做一個基本的自定義單元格,並在我跟着教程後,我得到了這個問題。UITableView數據源問題

reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'

- (NSInteger)numberOfSections; 
{ 
    return 1; 
} 


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [array1 count]; 
} 

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

CustomCell *customCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

/*if (! customCell) { 
    NSArray *parts = [[NSBundle mainBundle] loadNibNamed:@"cell" owner:nil options:nil]; 
    customCell = [parts objectAtIndex:0]; 
} 
*/ 

customCell.lblTime.text = [array1 objectAtIndex:indexPath.row]; 
customCell.lblEvent.text = [array2 objectAtIndex:indexPath.row]; 

return customCell; 
} 

而且我已經設置在的tableView身份但仍不能正常工作,我用故事板。此外,我已經鏈接了datasourcedelegate。請問哪裏是我的問題?

+0

您是否嘗試過打破了'的cellForRowAtIndexPath:'方法,看是否customCell是零之後調用中退出? – Jonathan 2014-10-20 14:13:52

+0

請檢查您的單元格是靜態的還是動態的,並檢查您的.m委託類中的段和行是否給出了正確的編號 – 2014-10-20 14:14:56

+0

@Jonathan我現在檢查了customCell是否爲零。我該怎麼辦? – CAN 2014-10-20 14:15:57

回答

0

在第一次執行時,單元格爲零。所以編寫代碼來初始化單元格。

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

    static NSString *CellIdentifier = @"MainCell"; 

    CustomCell *cell = (CustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    if (cell == nil) { 
     NSArray *parts = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:nil options:nil]; 
     cell = [parts objectAtIndex:0]; 
    } 

    cell.lblTime.text = [array1 objectAtIndex:indexPath.row]; 
    cell.lblEvent.text = [array2 objectAtIndex:indexPath.row]; 

    return cell; 
} 
+0

它正在運行,但表格視圖是空的。你能幫助我嗎? – CAN 2014-10-21 08:58:50

+0

確保變量lblTime,lblEvent正確映射到存在於CustomCell中的標籤。 – 2014-10-21 09:09:35

+0

也檢查array1的數量 – 2014-10-21 09:15:57

0

您的自定義單元是從UITableViewCell繼承的嗎?你能告訴我們你的自定義單元代碼嗎?你也可以嘗試:

CustomCell *cell = [tableView dequeuReusableCellWithIdentifier:@"YourCellIdentifier" forIndexPath:indexPath]; 
0

使用dequeueReusableCellWithIdentifier:forIndexPath:而不是dequeueReusableCellWithIdentifier:,如果你看一下文檔,

的,

dequeueReusableCellWithIdentifier:forIndexPath 

For performance reasons, a table view's data source should generally reuse UITableViewCell objects when it assigns cells to rows in its tableView:cellForRowAtIndexPath: method. A table view maintains a queue or list of UITableViewCell objects that the data source has marked for reuse. Call this method from your data source object when asked to provide a new cell for the table view. This method dequeues an existing cell if one is available or creates a new one based on the class or nib file you previously registered.

dequeueReusableCellWithIdentifier:

For performance reasons, a table view's data source should generally reuse UITableViewCell objects when it assigns cells to rows in its tableView:cellForRowAtIndexPath: method. A table view maintains a queue or list of UITableViewCell objects that the data source has marked for reuse. Call this method from your data source object when asked to provide a new cell for the table view. This method dequeues an existing cell if one is available or creates a new one using the class or nib file you previously registered. If no cell is available for reuse and you did not register a class or nib file, this method returns nil.

注意「這個方法返回nil」。

僅供參考,請不要忘記您在使用使用方法之前註冊你的筆尖,registerNib:forCellReuseIdentifier:

由於您使用的故事板,確保「Resuse標識符」在故事板和一個你正在使用,以創建單元格是一樣的。

+0

這不是導致問題的原因。如果OP用於出隊的方法(舊的)返回nil,那麼新的更長的方法也會(因爲缺少或不正確的標識符)。鑑於OP的代碼,唯一的區別是哪條線會導致崩潰。另外,OP說他正在使用故事板,所以你不應該在那種情況下注冊一個筆尖。 – rdelmar 2014-10-20 16:16:11

+0

@rdelmar,你是對的。我錯過了故事板部分。我只是提供了一些可能有助於OP的信息。 – akshaynhegde 2014-10-21 01:57:34

0

先回答解決了你的錯誤:從分鏡檢查小區標識,它應該是所在的標識符名稱不能恢復ID

第二個答案:你需要把一個斷點,你填寫你的cell.lblTime.text和如果它是空的,請檢查您的陣列填充位置,並嘗試理解其爲空的原因。隨意填寫以提出進一步的問題。

0

如果您已在故事板和電池也在它的表視圖,那麼我認爲你可能不會設置在故事板的小區標識。

設置你的故事板電池「MainCell」的再利用標識