1

J'ai un TableView qui remplit les données extraites d'un NSFetchedResultsController. Toutefois, l'application cesse de répondre lorsque l'utilisateur défile trop rapidement dans la vue Tableau (généralement au bas de la Table).UITableView se bloque sur le défilement rapide

Xcode affiche un point d'arrêt dans le crash-

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

à la ligne où i assigne les attributs de la cellule:

cell.name.text = [Person Prénom: speaker.firstName andLastName: speaker.lastName]; (la cellule est une PersonStyleCell, sous-classe de UITableViewCell).

EDIT

Couchait avec la formation de failles de propriété de l'Etat du NSManagedObject, je reçois maintenant l'erreur:

CoreData could not fulfill a fault for '0x37f8f0 

Encore une fois, l'application se bloque uniquement lorsque l'utilisateur fait défiler la uitableview trop vite.

Une idée de pourquoi l'application se bloque? Il n'y a pas de fuites de mémoire, et je ne libère que les objets NSFetchedResultsController dans la méthode dealloc. Quel pourrait être le problème?

je réalisais que:

([(Person*)[self.personArray objectAtIndex:[indexPath row]] faultingState] == 0) 

vérifiera si les données stockées dans la NSManagedObject est la formation de failles (c.-à-n'est pas encore « chargé »), et je pense que le problème est qu'il essaie de mettre la cellule attributs avec des données qui ne sont pas encore accessibles. Placer les fonctions "set cell attributes" dans une instruction if qui ne fait que définir les attributs de la cellule si les données ne sont pas en cause semble corriger le crash, mais aucune donnée n'est affichée (je suppose que quand elle est initialisée, données pour tous les objets est défini comme « défaut »

Puis-je utiliser cette propriété d'état défaillant d'attendre que les données sont a chargé avant de les attributs de cellule? Si oui, comment

? Im espérant que ces informations J'ai considérablement simplifié ma question

+0

Utilisez-vous des cellules? –

+0

ouais, je crois que la cellule 'UITableViewCell * = [tableView dequeueReusableCellWithIdentifier: PlaceholderCellIdentifier]; 'prend soin de cela – ephilip

+0

Obtenez-vous les données pour chaque personne dans le tableau Person de certaines API REST - c'est pourquoi il faut du temps pour revenir ? –

Répondre

0

Je ne suis pas un expert CoreData mais je ne pense pas que la vitesse soit e question (nous utilisons CoreData dans notre application et je ne peux pas le faire défiler).

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdTroubleshooting.html suggère que vous supprimez des objets. Essayez-vous d'utiliser CoreData avec plusieurs threads (toujours difficile)?

Si faultingState "fonctionne" c'est parce que vous n'allez pas être complètement initialisé s'il y a une erreur.

1

Quelle taille de lot définissiez-vous? J'ai eu ce problème avec un grand nombre d'objets légers en utilisant une taille de lot de 20. L'augmentation de la taille du lot (pour moi, il était 60) empêché le crash sans effets négatifs sur les performances de défilement.

Questions connexes