Comment ajouter un élément à la UITableView?
Je suis en train d'ajouter des éléments à une UITableView
avec un bouton, voici mon code:
Dans viewDidLoad
: repository = [[NSMutableArray alloc] initWithObjects: nil];
//ADD ITEM TO LIST
[repository addObject:repo]; //repository is a NSMutableArray
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:([repository count]-1) inSection:0];
NSLog(@"Indexpath to add row ----> %ld", (long)indexPath.row);
[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationBottom];
[self.tableView endUpdates];
Maintenant les annonces de l'élément à la liste, mais seulement si il existe déjà une Cellule dans la
UITableViewController like i configured here: - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSLog(@"NSMutableArray count in \"numbersOfRowsInSection\" ----> %lu", (unsigned long)[repository count]);
return [repository count] + 1;
}
Voici mon journal:
Indexpath to add row ----> <NSIndexPath: 0x10d9499a0> {length = 2, path = 0 - 18446744073709551615} //This is "NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[repository count] - 1 inSection:0];"
2013-10-22 14:48:42.214 ApplicationName[41213:a0b] NSMutableArray count in "numbersOfRowsInSection" ----> 0 //This is the NSInteger returned in - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
2013-10-22 14:48:42.217 ApplicationName[41213:a0b] *** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-2903.2/UITableView.m:1330
2013-10-22 14:48:42.236 ApplicationName[41213:a0b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (0) must be equal to the number of rows contained in that section before the update (0), plus or minus the number of rows inserted or deleted from that section (1 inserted, 0 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).'
*** First throw call stack:
(
0 CoreFoundation 0x0000000101cdf795 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x00000001019bb991 objc_exception_throw + 43
2 CoreFoundation 0x0000000101cdf61a +[NSException raise:format:arguments:] + 106
3 Foundation 0x0000000101558bf9 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 189
4 UIKit 0x00000001006d51db -[UITableView _endCellAnimationsWithContext:] + 11410
5 ApplicationName 0x0000000100009b5d -[RepositoryViewController alertView:clickedButtonAtIndex:] + 829
6 UIKit 0x0000000100b1dbd8 -[_UIModalItemsCoordinator _notifyDelegateModalItem:tappedButtonAtIndex:] + 151
7 UIKit 0x0000000100707629 -[_UIModalItemAlertContentView tableView:didSelectRowAtIndexPath:] + 364
8 UIKit 0x00000001006e3d36 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1312
9 UIKit 0x00000001006e3e5f -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 221
10 UIKit 0x000000010063b0d2 _applyBlockToCFArrayCopiedToStack + 316
11 UIKit 0x000000010063af50 _afterCACommitHandler + 460
12 CoreFoundation 0x0000000101caaf97 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
13 CoreFoundation 0x0000000101caaf07 __CFRunLoopDoObservers + 391
14 CoreFoundation 0x0000000101c8a672 __CFRunLoopRun + 946
15 CoreFoundation 0x0000000101c89ed3 CFRunLoopRunSpecific + 467
16 GraphicsServices 0x0000000102efa3a4 GSEventRunModal + 161
17 UIKit 0x0000000100623a63 UIApplicationMain + 1010
18 ApplicationName 0x000000010000aae3 main + 115
19 libdyld.dylib 0x00000001067fd7e1 start + 0
20 ??? 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
La définition de la nouvelle indexpath à l'indice de (référentiel comte) - 1. Vous ajoutez l'élément à la source de données, puis de tenter d'insérer une ligne au-delà le nombre de lignes disponibles.
OriginalL'auteur David Gölzhäuser | 2013-10-21
Vous devez vous connecter pour publier un commentaire.
Mise à jour:
Tout d'abord, votre numberOfRowsInSection: méthode doit renvoyer le montant exact des lignes de ce que représente votre source de données. Dans ce cas, le dépôt:
Deuxièmement, chaque fois qu'un utilisateur appuie sur le bouton ajouter une nouvelle cellule, vous devez d'abord ajouter un élément à votre source de données, puis vous avez besoin d'insérer la cellule elle-même.
C'est aussi simple que cela.
J'ai mis à jour ma réponse
J'ai ajouté de la totalité de mon Journal de sortie à la question, je n'obtiens pas plus intelligent en lisant,
Où? Je ne peux pas le voir. Ajoutez le journal à votre question, pas ma réponse
Ups, ça ressemble à quelque chose allait mal, mais maintenant, il a travaillé (je pense)
OriginalL'auteur Tim
Eh bien, je suis tombé sur ce problème depuis un certain temps aussi, et j'ai été en utilisant swift, donc je pense poster mon code ici:
OriginalL'auteur harthoo