Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 自定义UITableView UITableView中的单元格问题_Objective C_Uitableview_Uiviewcontroller - Fatal编程技术网

Objective c 自定义UITableView UITableView中的单元格问题

Objective c 自定义UITableView UITableView中的单元格问题,objective-c,uitableview,uiviewcontroller,Objective C,Uitableview,Uiviewcontroller,我有一个带有UIViewController的应用程序,其中包含一个使用自定义表视图单元格的UITableView。我已经成功地将同一个自定义表视图单元格用于UITableViewController,但这次它是UIViewController中的UITableView。我的第一个想法是,这真的应该没有什么不同。然而,由于某些原因,在我的CellForRowatineXpath中,在初始加载时,“cell”并不像应该的那样是nil,因此从未调用实例化自定义单元格的代码 我使用interface

我有一个带有UIViewController的应用程序,其中包含一个使用自定义表视图单元格的UITableView。我已经成功地将同一个自定义表视图单元格用于UITableViewController,但这次它是UIViewController中的UITableView。我的第一个想法是,这真的应该没有什么不同。然而,由于某些原因,在我的CellForRowatineXpath中,在初始加载时,“cell”并不像应该的那样是nil,因此从未调用实例化自定义单元格的代码

我使用interface builder和手工编码创建了自定义单元格,结果完全相同。唯一值得注意的区别是,代码在与UITableViewController一起使用时工作正常,但在与包含UITableView的UIView一起使用时失败

我已验证我的单元格标识符是否正确配置,以及我的数据源和委托是否在UIViewController中正确设置。自定义单元格已正确设置其子类

-(FaveCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

FaveCell *cell = (FaveCell*)[tableView dequeueReusableCellWithIdentifier:cellID];
if(cell == nil){
    // this line of code is never reached
    cell = [[FaveCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
}

/* code to load controls

...

*/

return cell;
}
因此,当代码第一次进入cellforrowatinexpath时,“cell”应该是nil,但不是。同样,唯一值得注意的区别是UIView/UITableView与UITableViewController。这对任何人都有意义吗?有人能提供解决方案吗?谢谢

但是,由于某些原因,在my
cellForRowAtIndexPath:
中,在初始加载时,
cell
不是应该的
nil
,因此从未调用实例化自定义单元格的代码

这是因为从iOS 5.0开始,
UITableView
变得更加智能:如果您通过指定自定义单元格类型来告诉它您想要哪种类型的单元格,它会为您创建它们,因此
if(cell==nil)
代码确实从未输入过。从:

如果
dequeueReusableCellWithIdentifier:
方法请求在情节提要中定义的单元格,则该方法始终返回有效单元格。如果没有回收的单元等待重用,则该方法将使用故事板本身中的信息创建一个新单元。这样就无需检查
nil
的返回值并手动创建单元格


您的自定义单元格有NIB吗?是的,自定义单元格有NIB。您的表是否外观和行为正常,唯一的症状是如果(单元格==nil)代码没有输入?是的,事实上,当我取消对nil单元格的检查时,一切正常,这就解释了为什么我用笔尖创建的版本不能正常工作。但我也通过硬编码创建了一个自定义单元格。这产生了同样的结果。硬编码版本在表视图控制器中工作正常,但在表视图中工作不正常。似乎不检查nil单元格会与dequeueReusableCellWithIdentifier@Pheepster我在我的代码中保留检查,以防苹果决定做一些新的(不兼容的)事情他们实现了
dequeueReusableCellWithIdentifier:
方法。只要实例化是您在
if
中所做的唯一事情,它就不会有任何伤害(除非您依赖于名为inside
if
的特定初始值设定项,并且该初始值设定项与表视图所调用的初始值设定项不同)。