首页 > 代码库 > -tableView: cellForRowAtIndexPath:方法不执行问题
-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;
-tableView: cellForRowAtIndexPath:方法不执行问题