objective-c – 继续从dequeueReusableCellWithIdentifier获取ni
我在storyboard文件中创建了一个标识符为“mainViewTableCell”的原型单元格,并将主表视图与名为“NTTableViewController”的自定义控制器类连接起来.
我在NTTableViewController.m中实现了函数“tableView cellForRowAtIndexPath”,如下所示: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString* MAINVIEW_CELLIDENTIFIER = @"mainViewTableCell"; UITableViewCell *newCell = [tableView dequeueReusableCellWithIdentifier: MAINVIEW_CELLIDENTIFIER]; if (newCell == nil) { newCell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier: MAINVIEW_CELLIDENTIFIER]; [newCell autorelease]; newCell.selectionStyle = UITableViewCellSelectionStyleNone; } NTContactItem* currentItem = [self.contactItemContainer objectInContainerAtIndex: indexPath.row]; NSString* firstName = currentItem.firstName; NSString* lastName = currentItem.lastName; NSString* fullName = [firstName stringByAppendingFormat: lastName]; [newCell.textLabel setText: fullName]; [newCell.detailTextLabel setText: currentItem.mobilePhone]; return newCell; } 但我继续从dequeueReusableCellWithIdentifier获取nil,并且每次都必须创建一个新的cell实例. 那么,有什么不对? 代码:project 谢谢大家. 解决方法
对于具有原型单元格的故事板和tableviews,[tableView dequeueReusableCellWithIdentifier:]不应返回nil.即使这是第一个单元格,并且重用队列中已经没有单元格,tableview将创建原型单元格的新实例并返回该实例.
在你的情况下,问题是完全不同的(我下载你的项目,因为我真的很好奇). 在应用程序的应用程序委托中:didFinishLaunchingWithOptions:方法,您将重新初始化此tableviewcontroller.当你调用[masterController init]时,这会调用[super init],然后调用[UITableViewController initWithStyle:]. 这会导致控制器创建一个新的UITableView,它与故事板中的UITableView不同.新的UITableView没有原型单元格,这就是为什么dequeueReusableCellWithIdentifier:返回nil. 当然,教训是不重新初始化已经初始化的Objective-C对象.从故事板加载表视图控制器时,加载机制将使用initWithCoder:初始化它.因此,如果您需要进行一些自定义初始化工作(比如在您的情况下设置NSMutableArray),那么只需覆盖initWithCoder:和/或awakeFromNib. 您可以根据需要覆盖这些方法,但不要自己调用它们. initWithCoder:和awakeFromNib都将由Storyboard / nib加载机制调用. 如果一切正确,则无需在此以编程方式创建单元格.不需要这段代码: // This bit is unnecessary with storyboards: if (newCell == nil) { newCell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier: MAINVIEW_CELLIDENTIFIER]; [newCell autorelease]; newCell.selectionStyle = UITableViewCellSelectionStyleNone; } 希望有所帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |