核心数据:保存前存储Web内容

时间:2010-10-26 23:05:53

标签: iphone uitableview core-data nsdictionary nsobject

我目前正在开发一款非常依赖于检索网页内容的应用。我有一系列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数据填充的)吗?

2 个答案:

答案 0 :(得分:1)

我不确定你是否已达到底线,但我建议你为所有对象使用NSManagedObject,并且只保留你感兴趣的对象。

请记住,所有对象都保留在上下文中,并且在您明确保存上下文之前不会保留。在此之前,您可以摆脱不需要的东西,然后向上下文发送保存消息。

答案 1 :(得分:0)

您不必将托管对象插入上下文,只要使用托管对象模型中的正确信息对其进行初始化即可。假设您可以从app delegate获取托管对象模型,您可以执行以下操作:

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