La création de sections avec NSFetchedResultsController, à la volée
Je suis en utilisant NSFetchedResultsController
(NSFRC) pour afficher des informations dans un UITableView
. Je suis en train de créer la possibilité pour l'utilisateur de trier les cellules dans les sections, par opposition à l'ordre alphabétique. Le problème est, les sections qui serait déterminé à l'aide de données téléchargées. Sur le dessus de cette section pour chaque élément va changer relativement souvent, donc je ne veux pas enregistrer la section. J'ai remarqué la mention passagère des attributs, dans ma recherche de problèmes similaires, mais je n'ai jamais utilisé l'un de ces avant que je ne suis pas sûr si je peux les utiliser à nu à l'esprit que tous les calculs sont effectués une fois que les données ont déjà été chargées, et je veux aussi que cette solution pour être compatible avec mon précédent Core Data database
. Aussi, je ne suis pas particulièrement grande à Core Data
, (ni Objective-C
qui plus est!) donc, je ne suis pas entièrement sûr de savoir comment j'allais le faire.
Voici ce que j'ai envie d'aller faire si nous sommes à l'aide transitoire attributs (ce bit suivant est théorique car je ne sais pas si transitoire attributs sont la bonne voie à suivre). Je voudrais 4 sections possibles, de 0 à 3 (je vais les renommer à l'aide de la TableView delegate
pour contourner les problèmes de tri). Quand le calcul est terminé, chaque cellule sera attribué à l'éphémère, de l'attribut (si nécessaire, la valeur par défaut est 2). J'espère que tout cela fait sens.
Droit, maintenant, pour certains théorique de code. J'ai d'abord créer le transitoire de la propriété dans le Modèle de Données de l'écran-chose, et de le rendre transitoire par la vérification de l'transitoire case à cocher... semble assez simple.
Dans le code pour les calculs dans willDisplayCell
(qui doit être fait dans wDC pour un couple de raisons), l'entité pourrait être enregistré comme ceci:
MyEntity *myEntity = [self.fetchedResultsController objectAtIndexPath:indexPath];
myEntity.sectionTransientProperty = 2;
if (![self.managedObjectContext save:&error]) {
NSLog(@"Error: %@", error);
FATAL_CORE_DATA_ERROR(error);
return;
}
À faire, non? C'est que la façon dont nous affecter une valeur à une passagère de la propriété?
Puis-je changer l'option de tri dans NSFRC quand je alloc:
fetchedResultsController = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:@"sectionTransientProperty"
cacheName:@"MyEntity"];
Comment faisons-nous, de quoi dois-je faire? Ou j'ai obtenu ce si horriblement mal, je doit juste donner sur Core Data and NSFRC?
Si vous les gars pourrait aider à me guider à travers ce que je l'apprécierais vraiment. Si vous avez besoin de moi pour poster tout le code, je serais heureux de.
Ce qui concerne,
Mike
OriginalL'auteur Mackey18 | 2013-01-05
Vous devez vous connecter pour publier un commentaire.
Si vous voulez un COMITÉ avec des sections, vous devez ajouter une sorte de descripteur à la demande de récupération, et ce genre de descripteur ne peut pas être fondée sur des transitoires attributs.
Consultez la documentation de initWithFetchRequest:managedObjectContext:sectionNameKeyPath:cacheName:`:
et Extraction de Prédicats et de Tri des Descripteurs dans la "Base de Données Guide de Programmation":
Cela signifie que vous ne peut pas de créer des sections purement transitoire attributs. Vous avez besoin d'un attribut persistant qui crée l'ordre des sections.
Mise à JOUR: UNE utilisation typique d'un transitoire de l'attribut comme
sectionNameKeyPath
est: Vos objets ont une "timeStamp" attribut, et que vous voulez regrouper les objets en sections avec une section par mois (voir le DateSectionTitles exemple de code à partir de la Bibliothèque de développement iOS). Dans ce cas, vous avezsectionNameKeyPath
. "sectionIdentifier" est calculé à partir de "timeStamp" et retourne une chaîne de caractères représentant l'année et le mois de l'horodatage, par exemple, "2013-01".La première chose que le FRC n'est à sorte toutes extraites des objets selon le "timeStamp" attribut. Puis les objets sont regroupés en sections, selon le "sectionIdentifier" attribut.
Donc, pour un COMITÉ de groupe les objets en sections vous vraiment besoin un attribut persistant. La solution la plus simple serait d'ajouter un attribut persistant "sectionNumber" à votre entité, et l'utiliser pour "sectionNameKeyPath" et pour le premier type de descripteur.
sectionNameKeyPath:@"sectionTransientProperty"
vous permet de définir les articles à partir d'un transitoire.Le premier type de descripteur doit utiliser la même clé que le sectionNameKeyPath ou de l'ordre relatif à l'aide de sa clé doit correspondre à l'aide de sectionNameKeyPath. - Est-ce une condition remplie?
Hmm, comment ont-ils de le faire ici: stackoverflow.com/questions/1384345/... ? Ok, donc si Transitoire Propriétés sont pas, comment puis-je réaliser ce que j'espérais?
J'ai mis à jour la réponse avec plus d'informations, le degré de persistance et transitoire des attributs de travail avec le COMITÉ des sections. Et je pense que la même chose est fait dans le stackoverflow.com/questions/1384345/...: Ils utilisent un transitoire de l'attribut qui est calculée à partir persistants, à l'attribut.
Selon Léger Migration dans les "Données de Base Modèle de gestion des versions et la Migration de Données Guide de Programmation", Base de Données peut effectuer l'ajout d'un nouvel attribut avec la migration automatique des données aka léger migration.
OriginalL'auteur