L'échec d'Assertion dans -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:]
Pour une raison quelconque, mon application est en défaut lorsque vous essayez de charger les cellules dans le tableview. Tous mes tableviews tout au long de l'app sont exactement les mêmes et je n'ai pas de problèmes avec eux. Pourrait-il possible d'avoir à faire avec de l'initialisation du Contrôleur à partir d'un autre viewController? Je ne le pense pas. Ma cellule dans la table de montage séquentiel a été donné à l'identificateur. Voici un lien vers une capture d'écran.
Donc, j'ai tout essayé ici et rien n'a fonctionné.
Ici est la sortie en utilisant le [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath de la méthode]:
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
Et voici mon code pour la UITableView Contrôleur:
#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
Merci pour chacuns de l'aide. Je suis un peu désespérée.
- Il me semble que vous êtes en utilisant une classe personnalisée
ProcedureTableViewCell
pour la réalisation de votre cellule. Assurez-vous que vous n'êtes pas le remplacement de la cellule identifiant en quelque sorte à l'intérieur - Tout ce que je fait dans cette classe était céder la IBOutlets pour le label et la UIImage.
- Avez-vous mis le
Class
de votre Prototype de Cellule pour êtreProcedureTableViewCell
. EstProcedureTableViewCell
une sous-classe deUITableViewCell
. - Prototype ne demandez à la classe de ProcedureTableViewCell, c'est une sous-classe si UITableViewCell.
- La classe pour le prototype de cellule doit avoir été mis à
ProcedureTableViewCell
de l'identité de l'inspecteur, comme il semble, comme à partir de votre conception - La classe à partir de l'identité de l'inspecteur est fixé à ProcedureTableViewCell.
- double possible de l'échec d'Assertion dans dequeueReusableCellWithIdentifier:forIndexPath:
- ce qui signifie que, "assurez-vous que vous n'êtes pas le remplacement de la cellule identifiant en quelque sorte à l'intérieur' ? identificateur est défini au storyboard et je sais qu'il n'y a pas de code de la modification de l'identifiant
Vous devez vous connecter pour publier un commentaire.
Mon mauvais! Il me semble que vous utilisez
dequeueReusableCellWithIdentifier:forIndexPath:
méthode pour dequeueing cellule. S'il vous plaît essayerdequeueReusableCellWithIdentifier:
au lieu de cela, cela devrait fonctionner.dequeueReusableCellWithIdentifier:forIndexPath:
attend d'une plume ou d'un fichier de classe enregistrée pour dequeueing cellules, mais vous êtes à l'aide de storyboard prototype de cellule. EtdequeueReusableCellWithIdentifier:
est garantie pour renvoyer une cellule de storyboard si vous utilisez le bon identifiant.Espère que cela aide.
J'ai eu le même problème comme le vôtre.
J'ai trouvé ce qui était le problème.
Dans votre code,
vous devez utiliser 'dequeueReusableCellWithIdentifier:forIndexPath:indexPath méthode lorsque vous utilisez segue vue entre les contrôleurs de storyboard(j'ai dit" la connexion des contrôleurs dans le scénario).
Si vous venez de dessiner votre cellule personnalisé en utilisant l'Interface builder, vous devez utiliser la méthode ci-dessous
Essayer ce code ci-dessous pour la configuration de votre cellule personnalisé.