UITableView Base de Données de la réorganisation
Je sais que cette question a été posée, et j'ai pris un coup d'oeil à la réponse à cette question. Cependant, je suis toujours confus quant à la façon de mettre en œuvre la réorganisation avec un UITableView dans une Base de Données de projet. Ce que je sais, c'est que j'ai besoin d'avoir un "displayOrder" attribut dans l'Entité, pour suivre l'ordre des éléments, et j'ai besoin d'énumérer tous les objets dans la prochaine résultats et de définir leurs displayOrder attribut.
Dans le code donné dans la question que j'ai lié à la vue de la table délégué appels de méthode une méthode comme ceci [self FF_fetchResults];
, et le code de cette méthode n'est pas donné, il est donc difficile de dire ce que c'est exactement.
Est-il un exemple de code qui illustre ce? Ce serait plus simple de regarder que le partage de gros morceaux de code.
Grâce
- Avez-vous essayé liés code? Si vous utilisez un récupérés résultats contrôleur, vous ne pouvez pas besoin de faire quoi que ce soit. Cette méthode est que de récupérer les objets (maintenant que le genre a changé).
- Merci, je vais essayer. Est-il nécessaire d'aller chercher les objets à nouveau après que l'ordre a changé?
- Vous ne devriez pas avoir besoin si vous utilisez un récupérés résultats contrôleur (et ont chaudière plaque de code pour mettre à jour l'affichage de la table lors de la prochaine résultats contrôleur de modifications).
- Je viens de réaliser que le lié code ne semble pas utiliser
NSManagedObjectContext
etNSFetchedResultsController
(aussi loin que je peux voir). J'ai essayé de l'adapter à mes besoins en utilisantNSManagedObject
au lieu deFFObject
et en enregistrant le contexte à la fin. Mais cela ne fonctionne pas du tout, l'INTERFACE utilisateur complètement bousille lorsque je déplace une ligne (les lignes disparaissent, d'autres sont leurs positions de commutation, de façon générale, le chaos). Existe-il des exemples de projets/projets open source, mise en œuvre de cette?
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr de la partie, vous rencontrez des problèmes avec (sur la base des commentaires)... mais ici, c'est ma suggestion. Le displayOrder est juste un simple attribut sur un NSManagedObject classe. Si vous pouvez enregistrer un objet géré, alors vous serez en mesure de terminer cette fonctionnalité. Permet d'abord de prendre un simple NSManagedObject:
Prochain, nous avons besoin d'avoir une copie locale des données affichées dans la tableview. J'ai lu les commentaires que vous avez fait et je ne suis pas vraiment sûr si vous utilisez le FetchedResultsController ou pas. Ma suggestion serait de commencer simple et il suffit d'utiliser une normale tableviewcontroller où vous mettez à jour les données de ligne à chaque fois qu'un utilisateur change l'ordre d'affichage... puis enregistrez la commande lorsque l'utilisateur a terminé l'édition.
L'interface pour cette tableviewcontoller devrait ressembler à ceci:
Prochain, nous avons besoin de charger le tableau de la vue de données dans le viewWillAppear méthode:
Il y a 2 choses qui se passent ici... (je vais vous expliquer la editButtonItem plus tard) la première est que nous avons besoin pour obtenir nos données à partir de CoreData. Quand je dois faire ce que j'ai une certaine sorte d'aide(appelez ça comme vous voulez) objet de faire le travail. Typique de la méthode find devrait ressembler à ceci:
Maintenant que vous avez vos données, vous pouvez maintenant attendre que l'utilisateur de modifier le tableau. C'est là que le [auto editButtonItem] entre en jeu. C'est un construit en fonction qui retourne un bouton de la barre d'élément qui fait basculer son titre et associés de l'état d'Édition entre et Fait. Lorsque l'utilisateur appuie sur le bouton, il va invoquer la setEditing:animation: méthode:
De mettre à jour l'affichage de la commande, vous devez remplacer le setEditing méthode sur la UITableViewController classe. Il devrait ressembler à quelque chose comme ceci:
Nous n'avons pas à faire quoi que ce soit quand l'utilisateur est en mode édition... nous ne voulons sauver une fois qu'ils ont appuyé sur le bouton "Terminé". Lorsqu'un utilisateur fait glisser une ligne dans la table, vous pouvez mettre à jour votre ordre d'affichage en remplaçant la canMoveRowAtIndexPath et moveRowAtIndexPath méthodes:
Encore une fois, la raison pour laquelle je ne pas mettre à jour le displayOrder valeur ici, c'est parce que l'utilisateur est toujours en mode édition... nous ne savons pas si l'utilisateur est terminé, ET qu'ils pourrait même annuler ce qu'ils ont fait par pas de frapper le bouton "Terminé".
MODIFIER
Si vous souhaitez supprimer une ligne, vous devez remplacer tableView:commitEditingStyle:forRowAtIndexPath et faire quelque chose comme ceci:
-deleteRows…:withRowAnimation:
n'est pas un BOOLÉEN, et-tableView:canMoveRowAtIndexPath:
doit retournerYES
, pastrue
.