Основные данные: хранение веб-контента перед сохранением - PullRequest
0 голосов
/ 27 октября 2010

В настоящее время я занимаюсь разработкой приложения, которое в значительной степени зависит от извлечения веб-содержимого. У меня есть серия классов 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 ]

1 голос
/ 08 декабря 2010

Я не уверен, что вы дошли до сути, но я бы посоветовал вам использовать NSManagedObject для всех ваших объектов и сохранять только те, которые вас интересуют.

Помните, что все ваши объекты хранятся в контексте и не сохраняются до тех пор, пока вы явно не сохраните контекст. Перед этим вы можете избавиться от нежелательных вещей, а затем отправили контексту сообщение о сохранении.

0 голосов
/ 08 декабря 2010

Вам не нужно вставлять управляемые объекты в контекст, если вы инициализируете их правильной информацией из модели управляемого объекта. Предполагая, что вы можете получить модель управляемого объекта от делегата приложения, вы можете сделать что-то вроде следующего:

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