【发布时间】:2016-08-29 08:59:51
【问题描述】:
我在更改视图控制器时遇到了一些崩溃问题 - 基本上我有一个 VC 从用户那里获取数据进行搜索 - 然后它会打开一个带有搜索结果的新 VC,显示在 UITableView (不使用UITableViewController,只是在常规UIViewController 中使用TableView)
崩溃日志:
2016-08-29 20:48:03.950 MyApp[2596:60877] *** 断言失败 -[SearchResultsTable _configureCellForDisplay:forIndexPath:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim /UIKit-3512.60.7/UITableView.m:7971
2016-08-29 20:48:03.961 MyApp[2596:60877] 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“UITableView (; layer = ; contentOffset: {0, 0}; contentSize: {375 , 1128}>) 未能从其 dataSource (; layer = ; contentOffset: {0, 0}; contentSize: {0, 0}>)' *** 首先抛出调用栈:
我了解到此问题是由于未在您的 cellForRowAtIndexPath 函数中返回单元格引起的,但我确信我的实现将成功返回一个单元格。 (我在别处测试了函数的代码,cell 实际上确实有一个值,并且不是 nil。)
代码:
@property searchResultCell * cell;
-(UITableViewCell*)cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
_cell = [self dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
if (_cell == nil)
{
_cell = [[searchResultCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
[[_cell txtDate] setText:@"test"];
return _cell;
}
在设置了一些断点后,这部分代码似乎从未执行过,尽管 UITableView 类、委托和数据源设置正确。
搜索结果 VC 的 viewDidLoad([self SpecifiedSerial] 是在 segue 发生之前预先设置的。它是一个 NSString*):
- (void)viewDidLoad
{
[super viewDidLoad];
_SearchResultsTableDelegate = [[searchResultsTable alloc] init:[self specifiedSerial]];
[[self SearchResultsTable] setDelegate:_SearchResultsTableDelegate];
[[self SearchResultsTable] setDataSource:_SearchResultsTableDelegate];
}
声明:
@property (weak, nonatomic) IBOutlet UITableView *SearchResultsTable;
@property searchResultsTable * SearchResultsTableDelegate;
如果有人能在这里指出正确的方向,将不胜感激!
【问题讨论】:
-
你能显示调用它的时间和地点吗?
-
试试这个 UITableViewCell *_cell = [yourTableView dequeueReusableCellWithIdentifier:@"cell"]; if (_cell == nil) { _cell =[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];}
-
显示更多代码,为什么delegate没有将自己设置为table delegate?
标签: ios objective-c uitableview uiviewcontroller