• -tableView: cellForRowAtIndexPath:方法不执行问题


                          今天在学习UItableView 的时候,定义了一个属性

                            

    1 @property (weak, nonatomic) NSMutableArray *dataList;

                            在ViewDidLoad方法方法中用一下方法实例化

     1  _dataList = [NSMutableArray arrayWithCapacity:20];      
     2 
     3     for (NSInteger i = 0; i < 20; i++)     
     4 
     5 {       
     6 
     7       Book *book = [[Book alloc]init];                 
     8 
     9       NSString *string = [NSString stringWithFormat:@"iOS进阶(%ld)", i];        
    10 
    11      [book setBookName:string];         
    12 
    13      [book setPrice:98.98];                  
    14 
    15      [_dataList addObject:book];      
    16 
    17 }


    然后实现UItableViewDataSource代理方式

     1 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
     2 {
     3         return _dataList.count; 
     4 }
     5 
     6 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
     7 {        
     8    static NSString * CellIdentifier = @"bookCell";    
     9    BookCell *bookCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];          
    10    if (bookCell == nil)     
    11   {       
    12       bookCell = [[BookCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];         
    13       NSBundle *bundle = [NSBundle mainBundle];        
    14       NSArray *array = [bundle loadNibNamed:@"BookCell" owner:nil options:nil];                  
    15       bookCell = [array lastObject];
    16   }         
    17 
    18   Book *book = _dataList[indexPath.row];     
    19   bookCell.bookPrice.text = book.bookPrice;     
    20   bookCell.bookName.text = book.bookName;          
    21 
    22   return bookCell; 
    23 
    24 }


    运行以后没有任何数据,也没有错误,跟踪调试后发现-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 方法没有执行,再继续跟踪,发现

     - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    2 {
    3         return _dataList.count;
    4 }

    这个方法的返回值是0,即使 _dataList.count是0,为什么是0,原来在定义的时候把 _dataList 属性写成了weak,所以就没有retain,要写成strong。由于- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 的返回值是0,所以就不会调用-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 了。

    关于weak和strong看这篇文章http://www.2cto.com/kf/201303/192824.html;

  • 相关阅读:
    今天的雪糕格外好吃!
    定了!对于本周四(7.16日)抽奖活动取消简要说明,新抽奖活动暂定下周三(7.22日)...
    你喜欢什么样的课堂?
    无题
    属于你们的“礼仪小课堂”
    红歌合唱之团结就是力量
    《此生未完成》痛句摘录(一)
    端午前夕的班级小游戏
    排序>插入排序 小强斋
    排序>交换排序 小强斋
  • 原文地址:https://www.cnblogs.com/shanyimin/p/4106019.html
Copyright © 2020-2023  润新知