2010-10-26 4 views
0

Je développe actuellement une application qui dépend fortement de la récupération de contenu Web. J'ai une série de classes NSObject qui représentent le contenu que je récupère au format JSON. J'ai aussi des classes NSManagedObject qui représentent mon modèle Core Data qui sont presque identiques.Core Data: stocker du contenu Web avant de l'enregistrer

Voici un exemple d'une classe NSObject que j'utilise pour tenir mon contenu web:

@interface MovieRecord : NSObject { 
NSString *movieTitle; 
NSDecimalNumber *movieId; 
NSString *movieRating; 
NSString *movieDescription; 

NSDate *movieReleaseDate; 

NSMutableArray *movieVideos; // collection of class videoRecord 
NSMutableArray *actors; 

UIImage *movieImage; 
NSURL *movieImageURL; 
} 

Et voici un exemple de ma classe NSManagedObject:

@interface Movie : NSManagedObject 
{ 
} 

@property (nonatomic, retain) NSNumber * id; 
@property (nonatomic, retain) NSString * description; 
@property (nonatomic, retain) id image; 
@property (nonatomic, retain) NSString * rating; 
@property (nonatomic, retain) NSString * name; 
@property (nonatomic, retain) NSDate * releaseDate; 
@property (nonatomic, retain) NSString * imageURL; 
@property (nonatomic, retain) NSSet* actors; 

@end 

Dans cet exemple, un utilisateur va regarder à travers beaucoup de films, mais ils ne seront pas toujours enregistrer le film dans le magasin persistant. C'était la principale raison pour laquelle je stockais les informations dans des classes séparées, puis si elles décidaient de les sauvegarder, je remplissais les classes d'objets NSManaged et les enregistrais. La classe NSObject ne sera pas entièrement remplie tant que l'utilisateur n'aura pas accédé à la vue détaillée (à l'origine, seuls MovieTitle et MovieID seront définis).

Je suppose que ma question est la suivante: est-il logique de garder ces classes séparées? Y a-t-il une meilleure approche de conception que je ne vois tout simplement pas? Devrais-je m'en tenir à utiliser le NSDictionary pour remplir mes vues de table (NSDictionary est peuplé à partir des données JSON)?

Répondre

1

Je ne sais pas si vous avez au fond de cela, mais je vous suggère d'utiliser un NSManagedObject pour tous vos objets et seulement persistez ceux qui vous intéressent.

Rappelez-vous tous vos objets sont conservés dans le contexte et ne pas persister jusqu'à ce que vous sauvegardez explicitement le contexte. Avant cela, vous pouvez vous débarrasser des choses indésirables, puis envoyé un message de sauvegarde au contexte.

0

Vous n'avez pas besoin d'insérer des objets gérés dans un contexte, tant que vous les initialisez avec les informations correctes de votre modèle d'objet géré. En supposant que vous puissiez obtenir votre modèle d'objet géré à partir du délégué de l'application, vous pouvez effectuer les opérations suivantes:

NSManagedObjectModel *objectModel = [appDelegate managedObjectModel]; 
Movie *obj = [[Movie alloc] 
    initWithEntity:[[objectModel entitiesByName] objectForKey:@"Movie"] 
    insertIntoManagedObjectContext:nil 
];