我目前正在开发一款非常依赖于检索网页内容的应用。我有一系列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对象类并保存。在用户钻取到详细视图之前,NSObject类将不会完全填充(最初只设置movieTitle和movieID)。
我想我的问题是将这些类分开是否有意义?有没有更好的设计方法,我只是没有看到?我应该坚持使用NSDictionary来填充我的表视图(NSDictionary是从JSON数据填充的)吗?
答案 0 :(得分:1)
我不确定你是否已达到底线,但我建议你为所有对象使用NSManagedObject,并且只保留你感兴趣的对象。
请记住,所有对象都保留在上下文中,并且在您明确保存上下文之前不会保留。在此之前,您可以摆脱不需要的东西,然后向上下文发送保存消息。
答案 1 :(得分:0)
您不必将托管对象插入上下文,只要使用托管对象模型中的正确信息对其进行初始化即可。假设您可以从app delegate获取托管对象模型,您可以执行以下操作:
NSManagedObjectModel *objectModel = [appDelegate managedObjectModel];
Movie *obj = [[Movie alloc]
initWithEntity:[[objectModel entitiesByName] objectForKey:@"Movie"]
insertIntoManagedObjectContext:nil
];