核心数据:在保存之前存储网络内容
问题描述:
我目前正在开发一个应用程序,严重依赖于检索Web内容。我有一系列的NSObject类代表我以JSON格式检索的内容。我也有代表我的核心数据模型的NSManagedObject类几乎完全相同。核心数据:在保存之前存储网络内容
这里是我用来握住我的网页内容的NSObject类的一个实例:
@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;
}
这里是我的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
在这个例子中,用户将浏览很多电影,但他们并不总是将电影保存到持久存储中。这是我首先将信息存储到独立类中的主要原因,然后如果他们决定保存它,我将填充NSManaged对象类并保存。直到用户深入细节视图(最初只有movieTitle和movieID将被设置),NSObject类才会被完全填充。
我想我这里的问题是保持这些类分离是否有意义?有没有更好的设计方法,我只是没有看到?我应该坚持使用NSDictionary填充我的表视图(NSDictionary从JSON数据填充)?
答
我不知道,如果你一定要查个水落石出,但我建议你使用NSManagedObject您的所有对象和只能坚持你感兴趣的人。
记住所有的对象都保持在上下文中并且在您明确保存上下文之前不会保留。在此之前,你可以摆脱不需要的东西,然后发送保存消息的上下文。
答
只要您使用管理对象模型中的正确信息初始化它们,就不必将管理对象插入到上下文中。假设您可以从应用代理获取托管对象模型,则可以执行以下操作:
NSManagedObjectModel *objectModel = [appDelegate managedObjectModel];
Movie *obj = [[Movie alloc]
initWithEntity:[[objectModel entitiesByName] objectForKey:@"Movie"]
insertIntoManagedObjectContext:nil
];