我在更改视图控制器时遇到了一些崩溃问题 - 基本上我有一个VC从用户那里获取数据进行搜索 - 然后它会调出一个带有搜索结果的新VC,显示在UITableView(不使用UITableViewController
,只是普通UIViewController
内的TableView)
崩溃日志:
2016-08-29 20:48:03.950 MyApp [2596:60877] ***断言失败 - [SearchResultsTable _configureCellForDisplay:forIndexPath:],/ BuildRoot / Library / Cache / com.apple.xbs / Source / 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
类,委托和dataSource,但是在放置了一些断点之后,似乎永远都不会执行这部分代码。
搜索结果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;
如果有人能指出我在这方面的正确方向,我们将非常感激!
答案 0 :(得分:2)
使用此代码:
-(UITableViewCell*)cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
_cell = [self dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
而不是:
numberOfRowsInSection
修改强>
您的numberOfSectionsInTableView
和-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return [[self searchedTrainSightings] count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
_cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell" forIndexPath:indexPath];
if (_cell == nil)
{
_cell = [[MyCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
[[_cell textLabel] setText:@"test"];
return _cell;
}
似乎不正确。
试试这段代码:
C21 C22 C23 C41 C42 C43 T21 T22 T23 T41 T42 T43
ENSG00000000003 660 451 493 355 495 444 743 259 422 204 149 623
ENSG00000000005 0 0 0 0 0 0 0 0 0 0 0 0
ENSG00000000419 978 928 1161 641 810807 1265 361 998 326 239 1055
ENSG00000000457 234 248 444 192 218 326 615 122 395 134 100 406
ENSG00000000460 1096 919 1253 693 907 1185 1648 381 1119 422 269 1267
答案 1 :(得分:1)
可能原因是你从cellForRowAtIndexPath
方法返回nil并且无法使可重用单元出列。
使用代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
searchResultCell *cell;
cell = (searchResultCell *)[tableView dequeueReusableCellWithIdentifier:@"cell"];
if (cell == nil){
cell = [[searchResultCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
[[_cell txtDate] setText:@"test"];
return cell;
}
只需配置您的单元格,使用storyboard 查看图片选择提供cell
标识符的自定义单元格。
希望它有所帮助。
答案 2 :(得分:0)
我严重怀疑你正在使用的委托方法。我见过这个版本的cellForRowAtIndexPath
方法
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
试试这个
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
_cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (_cell == nil)
{
_cell = [[searchResultCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
[[_cell txtDate] setText:@"test"];
return _cell;
}