iOS 7 UITableView indexpath 行属性为零
Posted
技术标签:
【中文标题】iOS 7 UITableView indexpath 行属性为零【英文标题】:iOS 7 UITableView indexpath row property is nil 【发布时间】:2013-10-12 04:02:22 【问题描述】:我有一个UITableView
,它包含一个自定义UITableViewCell
。为了测试,我有一个包含三个字符串的数组。 UITableView
委托方法按预期调用,但是,tableView:cellForRowAtIndexPath 委托始终传递一个 NSIndexPath
实例,其行属性始终为 == nil
:
tableView:cellForRowAtIndexPath
被调用 3 次(我的数组中的每个对象调用一次)。我从设计器(故事板)中添加了tableView
,并为它创建了一个出口。 UITableViewCell 实例似乎已正确实例化,每次调用此委托。我只是想不通为什么[indexPath row]
的值总是nil
。
接口:
在实现文件中:
@interface FirstViewController ()
@property(nonatomic, strong)AppDelegate *sharedDelegate;
@property(nonatomic, strong)NSArray *userList;
@end
在标题中:
@interface FirstViewController : UITableViewController <FacebookDelegate>
@property (strong, nonatomic) IBOutlet UITableView *tableView;
@end
初始化自定义单元格:
-(void)viewDidLoad
[self.tableView registerClass: [ListCategoryCell class]forCellReuseIdentifier:@"ListCategoryCell"];
self.userList = @[@"d", @"g", @"f"]; // make some test data
这让我发疯的代表:
//NSIndexPath.row is nil ?!
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *MyIdentifier = @"ListCategoryCell";
ListCategoryCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier forIndexPath:indexPath];
if (cell == nil)
cell = (ListCategoryCell *)[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier];
cell.titleLabel.text = [self.userList objectAtIndex:[indexPath row]];
cell.detailLabel.text = @"Detail";
return cell;
我错过了什么吗?谢谢!
工作中
我遗漏了一些我认为与我的问题非常相关的上下文(我不应该有)。我最初创建了一个 UIViewController,然后将一个 UITableView 添加到这个视图中。在 UITableView 我创建了一个自定义原型单元格。我做了所有的家务:
UIViewController
实现了UITableViewDelegate
和UITableViewDatasource
。
为UITableView
创建和出口。
连接所有网点
除了indextPath.row
属性始终为nil
之外,一切似乎都正常工作。我发现的一些资源表明,在调用 uitableview 代表之前,自定义单元格不可见。
最后我让我的类成为UITableViewController
的子类。事情开始起作用了。我仍然很好奇为什么我最初的尝试失败了。
感谢大家的时间。一些很棒的 cmets 帮助我调查了一些“值得了解”的主题。
【问题讨论】:
界面中的userList属性在哪里? 是的,你只需要分配初始化你的数组就可以解决你的问题 当你说[indexPath row
] 是nil
,你的意思是等于0(零)吗?我不认为它可以是nil
,因为它是NSInteger
尝试打印 indexPath,例如 (lldb) po indexPath; indexPath
是可以的。您在使用该表时遇到了什么问题?
【参考方案1】:
如果您希望视图控制器管理您的表格视图,您需要在视图控制器中提供至少两种方法。它们是:
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
你已经提供了第二个,所以你的表格视图实际上可以产生单元格,但它不知道有多少。第一个方法返回的默认值是 nil。这就是为什么你甚至没有一个索引路径。
可选:
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
默认值为一,因此如果您只有一个部分,则无需覆盖它
确保您的视图控制器也遵循委托和数据源协议。
【讨论】:
以上是关于iOS 7 UITableView indexpath 行属性为零的主要内容,如果未能解决你的问题,请参考以下文章