Exactement comme le titre l'indique, pourquoi Core Data crée-t-il des instances de NSManagedObject avec des propriétés pour l'attribut de chaque entité, mais pas de variable d'instance associée? Le problème est que je voudrais utiliser certaines de mes 'Entités' dans un style type alloc/init typique dans certaines parties de mon code. Ne pas utiliser la récupération/le contexte de Core Data pour créer/stocker. Je suppose que je pourrais rester sans les variables d'instance, mais cela ferait-il mal de les ajouter? Puis-je aussi changer le @dynamic en @synthesize pour pouvoir utiliser KVC sur mes propriétés/ivars? Peut-être que je me trompe complètement en essayant d'utiliser une de mes entités de données de base dans certaines parties de mon code sans utiliser les API de données de base. Encore assez nouveau pour comprendre quand je peux suivre ma propre route.Pourquoi les données de base créent-elles NSManagedObject avec des propriétés mais pas de variable d'instance associée?
Répondre
La raison pour laquelle il n'utilise pas ivars est que ces données ne sont pas présentes. Lorsque vous chargez un objet, il ne peut pas être défaillant dans toutes ses données. Les ivars ne sont que des variables, si vous et écrivez à eux, NSManagedObject n'a aucune chance d'erreur dans la valeur s'il n'a pas encore été chargé. Via les accesseurs NSManagedObject a un point d'étranglement qui lui permet de lire les données du disque s'il n'a pas encore été défectueux, ce qui signifie que votre graphe d'objet peut être amené paresseusement. Sinon, vous devrez apporter chaque objet connecté. Pour cette raison, vous ne pouvez pas simplement ajouter des ivars, ils n'auront pas les valeurs que vous voulez. De même, vous ne pouvez pas changer de @dynamic à @synthesized, les choses ne se comporteront pas correctement. Les implémentations de propriétés dynamiques fournies par CoreData sont complètement compatibles KVC et KVO.
Si vous souhaitez accéder aux valeurs sans déclencher KVO ou KVC, vous pouvez accéder aux valeurs "primitives". Vous faites cela de deux façons. Vous utilisez primitiveValueForKey: et setPrimitive: valueForKey: ou vous pouvez simplement déclarer la primitive et laisser CD fournir des implémentations dynamiques (à partir du documentation)
@interface Department : NSManagedObject
{
}
@property(nonatomic, retain) NSString *name;
@end
@interface Department (PrimitiveAccessors)
- (NSString *)primitiveName;
- (void)setPrimitiveName:(NSString *)newName;
@end
Vous n'avez pas besoin de variables d'instance avec des données de base. Un objet géré stocke ces valeurs ailleurs.
Je ne suis jamais allé très loin avec les données de base, mais si je me souviens bien, vous êtes censé utiliser primitiveValueForKey:
et setPrimitiveValue:forKey:
pour effectuer ces accès à partir de vos méthodes d'accès. (En dehors de vos accesseurs, vous devez utiliser soit les accesseurs eux-mêmes, soit valueForKey:
/setValue:forKey:
à la place.)
- 1. Déclaration de propriétés pour des relations trop nombreuses dans des données de base
- 2. Pourquoi les migrations Rails définissent-elles des clés étrangères dans l'application mais pas dans la base de données?
- 3. Données de base: Renvoyer les propriétés en fonction d'une valeur
- 4. nom de la base de données variable
- 5. Cocoa-Touch, Données de base: erreur de lien, symbole NSManagedObject introuvable
- 6. Pourquoi les propriétés ne sont pas déclarables dans les interfaces
- 7. Pourquoi ne puis-je pas déconnecter mes poignées de base de données avec DBD :: DB2?
- 8. Pourquoi les blocs de débordement dans une base de données ne sont-ils pas binaires?
- 9. LINQtoSQL Pas d'enregistrement dans la base de données, mais les modifications s'affichent dans l'application
- 10. Utiliser les données avec une structure variable
- 11. Linq-to-SQL avec les champs de base de données XML - Pourquoi cela fonctionne-t-il?
- 12. Les données apparaissent dans le simulateur mais pas dans l'appareil
- 13. Variable de session Asp.net de la base de données SQL
- 14. Pourquoi les caractères d'échappement (\) apparaissent-ils dans un champ de formulaire mais pas dans un autre?
- 15. Utilisation manuelle de NSManagedObject - Quelque chose ne va pas avec NSManagedContext?
- 16. Mapper les classes à la base de données avec ado.net
- 17. insérer des données dans la base de données avec jsp
- 18. Pourquoi 'Aucune base de données sélectionnée' SQLException?
- 19. Sérialisation personnalisée des propriétés de la classe de base
- 20. Intégration avec les calendriers - De l'application de base de données
- 21. Objets gérés de données de base avec ivars et méthodes supplémentaires
- 22. Pourquoi addTextObject() avec une variable jQuery ne fonctionne pas?
- 23. Extension de la classe de chaînes avec des propriétés?
- 24. Comment stocker des données modifiées dans une base de données?
- 25. En utilisant linq, la base de données n'a pas de relations FK avec les tables
- 26. Demande de données de base avec des prédicats - iPhone
- 27. .net XmlSerializer, ignorer les propriétés de la classe de base
- 28. la taille des colonnes de base de données pour les données à base de caractères
- 29. Intégration de services XMLRPC/Web avec des données de base
- 30. Synchronisation des données de base