断言失败 –

出于某种原因,我的应用程序在尝试将单元格加载到tableview时失败。 我在整个应用程序中的所有表格视图完全相同,我对它们没有任何问题。 是否可能与从另一个viewController初始化Controller有关? 我不这么认为。 故事板中的我的单元格已被赋予标识符。 这是一个屏幕截图的链接。

在此处输入图像描述

所以我在这里尝试了一切,没有任何效果。

这是使用[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]方法的输出:

2013-11-14 15:36:33.419 ComplyOS[43683:70b] *** Assertion failure in -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:], /SourceCache/UIKit_Sim/UIKit-2903.23/UITableView.m:5261 2013-11-14 15:36:33.424 ComplyOS[43683:70b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier ProcedureCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard' *** First throw call stack: ( 0 CoreFoundation 0x0000000101fa9795 __exceptionPreprocess + 165 1 libobjc.A.dylib 0x0000000101d0c991 objc_exception_throw + 43 2 CoreFoundation 0x0000000101fa961a +[NSException raise:format:arguments:] + 106 3 Foundation 0x00000001018a99e9 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 189 4 UIKit 0x00000001008f9879 -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:] + 150 5 ComplyOS 0x00000001000099b4 -[EndoPxTableViewController tableView:cellForRowAtIndexPath:] + 116 6 UIKit 0x0000000100902b8a -[UITableView _createPreparedCellForGlobalRow:withIndexPath:] + 348 7 UIKit 0x00000001008ea836 -[UITableView _updateVisibleCellsNow:] + 2297 8 UIKit 0x00000001008fb381 -[UITableView layoutSubviews] + 207 9 UIKit 0x0000000100892b27 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 354 10 QuartzCore 0x00000001005afa22 -[CALayer layoutSublayers] + 151 11 QuartzCore 0x00000001005a4589 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 363 12 QuartzCore 0x00000001005a440a _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24 13 QuartzCore 0x0000000100519694 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 252 14 QuartzCore 0x000000010051a70c _ZN2CA11Transaction6commitEv + 394 15 QuartzCore 0x000000010051ad79 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 89 16 CoreFoundation 0x0000000101f74ff7 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23 17 CoreFoundation 0x0000000101f74f67 __CFRunLoopDoObservers + 391 18 CoreFoundation 0x0000000101f546d2 __CFRunLoopRun + 946 19 CoreFoundation 0x0000000101f53f33 CFRunLoopRunSpecific + 467 20 GraphicsServices 0x0000000103c2b3a0 GSEventRunModal + 161 21 UIKit 0x0000000100837043 UIApplicationMain + 1010 22 Comply 0x0000000100002703 main + 115 23 libdyld.dylib 0x00000001029ed5fd start + 1 24 ??? 0x0000000000000001 0x0 + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException 

这是我的UITableView控制器的代码:

 #import "EndoPxTableViewController.h" #import  #import "ProcedureTableViewCell.h" @interface EndoPxTableViewController (){} @property (nonatomic, strong)NSArray *procedures; @end @implementation EndoPxTableViewController - (void)setVisitItem:(Patient_VisitsModel *)visitItem{ if(_visitItem !=visitItem){ _visitItem = visitItem; } } -(void)setUserId:(NSString *)userId{ if(_userId !=userId){ _userId = userId; } [self fetchProceduresData]; } - (void) fetchProceduresData{ NSString *procedureURLString =[NSString stringWithFormat:@"https://XXXX"; AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; [manager GET:procedureURLString parameters:nil success:^(AFHTTPRequestOperation *operation, id json) { _procedures = json; [self.tableView reloadData]; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error occured in getSessionID method"); NSLog(@"Error: %@", error); }]; } - (id)initWithStyle:(UITableViewStyle)style { self = [super initWithStyle:style]; if (self) { } return self; } - (void)viewDidLoad { [super viewDidLoad]; self.title = @"Endoscopy Report"; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } #pragma mark - Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { NSLog(@"Procedures:%@", [_procedures valueForKey:@"description"]); return _procedures.count; } - (ProcedureTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"ProcedureCell"; ProcedureTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; NSString *procedureDescription = [_procedures[indexPath.row] valueForKey:@"description"]; NSLog(@"Procedure Description:%@", procedureDescription); cell.procedureLabel.text = procedureDescription; cell.questionImage.image = nil; return cell; } #pragma mark - Navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { } @end 

感谢大家的帮助。 我有点绝望了。

我的错! 似乎您正在使用dequeueReusableCellWithIdentifier:forIndexPath:用于使单元格出dequeueReusableCellWithIdentifier:forIndexPath:方法。 请尝试dequeueReusableCellWithIdentifier:相反,它应该工作。

dequeueReusableCellWithIdentifier:forIndexPath:使用nib文件或已注册的类来使单元格出列,但您使用的是storyboard原型单元格。 并且dequeueReusableCellWithIdentifier:如果使用正确的标识符,则保证从故事板返回单元格。

希望能帮助到你。

我遇到了和你一样的问题。 我发现了什么问题。

在你的代码中,

 static NSString *CellIdentifier = @"ProcedureCell"; ProcedureTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

当你在storyboard中的视图控制器之间使用segue时,你应该使用’dequeueReusableCellWithIdentifier:forIndexPath:indexPath’方法(我在故事板中说’连接控制器’)。

如果您只是使用“界面”构建器绘制自定义单元格,则必须使用如下方法

 static NSString *CellIdentifier = @"ProcedureCell"; ProcedureTableViewCell *cell = (ProcedureTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[ProcedureTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } 

请尝试以下代码来配置自定义单元格。

  //configure cell -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellIdentifier = @"ProcedureCell"; ProcedureTableViewCell *cell = (ProcedureTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; // If there is no cell to reuse, create a new one if(cell == nil) { cell = [[ProcedureTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; } return cell; }