2011-05-18 84 views
3

在我的tableview中調用方法中的行no的方法被調用,它返回值17,但cellforrowatindexpath沒有被調用。我已經把斷點放在第一行這個方法,但這一點從來沒有顯示調試時,我已經遵循tableviewdelegate和datasource.and tableviews數據源,委託在Int構建器中正確設置。uitableview cellforrowatindexpath沒有調用,但沒有:行中的行被稱爲

我也張貼一些代碼

在我viewcontroller.m

-(void)viewDidLoad 
{ 

     tweets=[[NSMutableArray alloc]init]; 
     [self updateStream:nil]; 
     [self.tweetsTable setDelegate:self]; 
     [self.tweetsTable setDataSource:self]; 

} 


-(NSInteger)tableView:(UITableView *)tweetsTable numberOfRowsInSection:(NSInteger)section { 

    return [tweets count]; 

} 

-(UITableViewCell *)tableView:(UITableView *)tweetsTable cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"twitCell"; 
    TwitCell *cell = (TwitCell *)[tweetsTable dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = (TwitCell *)[[[TwitCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 
    cell.tweet = [tweets objectAtIndex:indexPath.row]; 
    [cell layoutSubviews]; 
    return cell; 
} 

回答

2

,如果你正在重返numberOfRowsInSection方法0行它不會被調用。 請檢查您返回的行數。

+0

其返回17。我發現,調試 – sujith1406 2011-05-18 11:12:08

0

檢查this

或者使用的viewDidLoad代碼在viewWillAppear中

2

鑑於你已經證明我們有隻有幾種可能性的代碼。 self.tweetsTablenil,tweetsniltweets不包含元素並且計數返回零。現在我知道你說一切都是正確的,但顯然有些事情已經結束了!您可以添加一些防禦性代碼來檢測這些問題。

-(void)viewDidLoad 
{ 

     tweets=[[NSMutableArray alloc]init]; 
     [self updateStream:nil]; 
     NSAssert(self.tweetsTable, @"self.tweetsTable must not be nil."); 
     [self.tweetsTable setDelegate:self]; 
     [self.tweetsTable setDataSource:self]; 

} 


-(NSInteger)tableView:(UITableView *)tweetsTable numberOfRowsInSection:(NSInteger)section { 

    NSAssert(tweets, @"tweets must not be nil here"); 
    NSUInteger n = [tweets count]; 
    if(n == 0) 
     NSLog(@"WARNING: %@ returning 0", __PRETTY_FUNCTION__); 
    return (NSInteger)n; 

} 

如果你這樣做,並且其中一個斷言觸發,你就會知道你的問題在哪裏。如果沒有聲明觸發,那麼你所展示的代碼範圍之外的事情正在發生(例如,getter被釋放到很快或內存被破壞)。哦,還有最後一件事 - 你能看到屏幕上的空表視圖嗎?如果您的表不可見,AFAIK cellForRowAtIndexPath將不會被調用。

+0

當雅我的tableview是不是visible.what這說明什麼? – sujith1406 2011-05-18 11:15:46

0

這是我的功能。在將「dispatch_async(dispatch_get_main_queue()...」放入「tweets = [NSJSONSerialization.....」之後,它可以正常工作。

tweets = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableLeaves error:&jsonError]; 
if (tweets) { 
    // We have an object that we can parse 
    NSLog(@"%@", tweets); 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self.tableView reloadData]; 
    }); 
} 
else { 
    // Inspect the contents of jsonError 
    NSLog(@"%@", jsonError); 
} 
0

在我的情況下,我創造了一個UITableView我的視圖控制器上的屬性,但我忘了把它作爲一個子視圖添加到self.view

奇怪的是,你會得到sujith描述的症狀:numberOfRowsInSection會被稱爲,但cellForRowAtIndexPath不會!

這是我的思念線:

[self.view addSubView:self.myTableViewProperty]; 

,並捍衛反對:

NSAssert(self.myTableViewProperty.superview != nil, @"The table view dose not have a superview"); 
[self.myTableViewProperty reloadData]; 
5

cellForRowAtIndexPath不會被調用,如果你的tableview有0

高度確保您的tableview總是有可見行

CGRect frame = self.tableView.frame; 
frame.size.height = 100; 
self.table.frame = frame; 
+1

在我的情況下,這是問題,你的問題解決了它!感謝Zayin Krige – 2016-11-13 11:17:41

0

你可以參考下面的代碼來重新加載你的tableView

[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO]; 
0

在我來說,我使用的UITableView的自定義子類,我還沒有所謂的超級超級。layoutSubviews()

override func layoutSubviews() { 
    super.layoutSubviews() // Forgotten to call super implementation 
    self.layer.borderColor = Constants.primaryColor.cgColor 
    self.layer.borderWidth = Constants.primaryBorderWidth 
    self.indicatorStyle = .white 
} 
相關問題