![](/img/trans.png)
[英]Assertion failure in [UITableView dequeueReusableCellWithIdentifier:forIndexPath:]
[英]Assertion failure in -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:]
出於某種原因,我的應用程序在嘗試將單元格加載到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 <AFHTTPRequestOperationManager.h>
#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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.