2013-11-14 8 views
5

Aus irgendeinem Grund schlägt meine App fehl, wenn versucht wird, die Zellen in die Tabellenansicht zu laden. Alle meine Tabellenansichten in der App sind genau gleich und ich habe keine Probleme mit ihnen. Könnte es mit der Initialisierung des Controllers von einem anderen ViewController zu tun haben? Ich würde nicht denken. Meine Zelle im Storyboard hat den Identifikator erhalten. Hier ist ein Link zu einem Screenshot.Assertionsfehler in - [UITableView dequeueReusableCellWithIdentifier: forIndexPath:]

enter image description here

Also habe ich alles here versucht und nichts hat funktioniert.

Hier ist die Ausgabe mit dem [Tableview dequeueReusableCellWithIdentifier: CellIdentifier forIndexPath: indexPath] Methode:

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 

Und hier ist mein Code für die UITableView Controller:

#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 

Vielen Dank für jedermanns Hilfe. Ich werde ein wenig verzweifelt.

+0

Es scheint, dass Sie eine benutzerdefinierte Klasse 'ProcedureTableViewCell' für Ihre benutzerdefinierte Zelle verwenden. Bitte stellen Sie sicher, dass Sie nicht die Zell-ID irgendwie in ihm ersetzen –

+0

Alles, was ich in dieser Klasse getan habe, war die IBOutlets für Label und UIImage zuweisen. –

+0

Haben Sie die 'Klasse' Ihrer Prototypzelle auf' ProcedureTableViewCell' gesetzt? Ist 'ProcedureTableViewCell' eine Unterklasse von' UITableViewCell'. –

Antwort

20

Mein schlechtes! Es scheint zu sein, dass Sie Methode zum Entfernen der Zelle verwenden. Bitte versuchen Sie dequeueReusableCellWithIdentifier: und es sollte funktionieren.

erwartet eine Nib-Datei oder eine registrierte Klasse für die Warteschlange aus Zellen, aber Sie verwenden Storyboard-Prototyp-Zelle. Und dequeueReusableCellWithIdentifier: wird garantiert eine Zelle aus dem Storyboard zurückgeben, wenn Sie den richtigen Bezeichner verwenden.

Ich hoffe, es hilft.

+0

Tada .... Ich hatte das vorher versucht und es hat nicht funktioniert. Ich weiß nicht, was ich anders gemacht habe, aber es hat die Ansicht mit der richtigen Anzahl von Zellen geladen. Jetzt muss ich herausfinden, warum es die "procedureDescription" nicht in jede der Zellen lädt. Der NSLog meldet sich gerade gut aus ... –

+0

was du eingegeben hast funktioniert nicht – LKM

+0

@LKM Ich bin mir nicht sicher, was für dich nicht funktioniert hat und nicht sicher über dein Problem. Ich denke, diese Antwort ist nicht für Ihr Problem gedacht. Vielen Dank. –

1

Ich hatte das gleiche Problem wie Ihres. Ich habe gefunden, was das Problem war.

in Ihrem Code

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

sollten Sie 'dequeueReusableCellWithIdentifier: forIndexPath: indexPath' verwenden Methode, wenn Sie segue zwischen View-Controller in Storyboard verwenden (sagte ich 'Verbindungs ​​Controller' in Storyboard).

Wenn Sie nur mithilfe von Interface Builder Ihre benutzerdefinierte Zelle zeichnen, Sie haben ein ähnliches Verfahren zu verwenden, unter

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

dies für die Konfiguration des benutzerdefinierten Zelle unter Code Versuchen.

Verwandte Themen