2013-11-14 5 views
5

何らかの理由で、私のアプリケーションがテーブルビューにセルをロードしようとしているときに失敗しています。アプリケーション全体の私のtableviewsはまったく同じで、私はそれらに問題はありません。コントローラを別のviewControllerから初期化する必要がありますか?私はそうは思わないだろう。ストーリーボードの私のセルには識別子が与えられています。ここにはスクリーンショットへのリンクがあります。アサーションエラー - [UITableView dequeueReusableCellWithIdentifier:forIndexPath:]

enter image description here

だから私はすべてhereを試してみましたし、何も働いていません。 [:CellIdentifier forIndexPath:indexPathのtableView dequeueReusableCellWithIdentifier]方法:

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コントローラの私のコードです:ここでは

は、使用して出力されeveryonesの助けを

#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 

感謝。私は少し必死になってきている。

+0

カスタムセルにカスタムクラス「ProcedureTableViewCell」を使用しているようです。何らかの形でセル識別子を置き換えないようにしてください。 –

+0

そのクラスでは、ラベルとUIImageのIBOutletsを割り当てました。 –

+0

Prototype Cellの 'Class'を' ProcedureTableViewCell'に設定しましたか? 'ProcedureTableViewCell'は' UITableViewCell'のサブクラスです。 –

答えて

20

悪い!セルをデキューする方法はdequeueReusableCellWithIdentifier:forIndexPath:です。代わりにdequeueReusableCellWithIdentifier:を試してください。正常に動作するはずです。

dequeueReusableCellWithIdentifier:forIndexPath:は、セルをデキューするためのnibファイルまたは登録済みクラスが必要ですが、ストーリーボードプロトタイプセルを使用しています。 dequeueReusableCellWithIdentifier:は、正しい識別子を使用すると、ストーリーボードからセルを返すことが保証されています。

希望します。

+0

Tadaを変更するコードはありません。私は前にそれを試していましたが、うまくいきませんでした。私は異なったことを知っていませんが、正確な数のセルをビューにロードしました。今、なぜ私はそれが "procedureDescription"を各セルにロードしていないのか把握しなければなりません。 NSLogはうまくログアウトしています... –

+0

あなたが入力したものdoens't work – LKM

+0

@ LKM私はあなたのためにうまくいかなかったし、あなたの問題についてもよく分からない。この回答はあなたの問題ではないと私は思う。ありがとう。 –

1

私はあなたのような同じ問題がありました。 私は問題が何かを発見しました。あなたのコードで

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

あなたは「dequeueReusableCellWithIdentifier:forIndexPath:indexPath」を使用する必要がありますが、ストーリーボードにビューコントローラ間セグエを使用するときの方法を(私は、ストーリーボードの「接続のコントローラは、」言いました)。

あなただけのインターフェイスビルダーを使用して、カスタムセルを描画する場合は、カスタムセルを構成するためにコードの下にこれを試してみてください

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

の下のようなメソッドを使用する必要があります。

//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; 
} 
関連する問題