создание двух отдельных постоянных хранилищ с RestKit 0.2x

Дизайн моего проекта требует, чтобы я создал два полностью отдельных постоянных хранилища с двумя разными RKObjectManagers и двумя разными baseURLs:

менеджер 1: будет иметь дело с store1.sqlite

менеджер 2: будет заниматься store2.sqlite

Итак, исходя из того, что я знаю, я должен создать:

1) 2 отдельные модели данных: модель 1 и модель 2

2) 2 отдельных контекста управляемых объектов: контекст 1 и контекст 2

3) 1 persistentStoreCoordinator

Раньше я настраивал RestKit 0.2x для работы с основными данными (1 хранилище) следующим образом:

  NSError *error = nil;    
NSURL *modelURL1 = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"store1" ofType:@"momd"]];
NSManagedObjectModel *managedObjectModel1 = [[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL1] mutableCopy];
RKManagedObjectStore *managedObjectStore1 = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel1];
[managedObjectStore1 createPersistentStoreCoordinator];
NSString *storePath = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"Store1.sqlite"];
NSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:storePath fromSeedDatabaseAtPath:nil withConfiguration:nil options:nil error:&error];
  if (error) {
NSLog(@"unresolved error %@, %@", error, [error userInfo]);
abort();
 }
[managedObjectStore1 createManagedObjectContexts];
manager1.managedObjectStore = managedObjectStore1 ;

managedObjectStore1.managedObjectCache = [[RKInMemoryManagedObjectCache alloc] initWithManagedObjectContext:managedObjectStore1.mainQueueManagedObjectContext];

где manager1 - это RKObjectManager

Мой вопрос:

1) какие изменения я должен внести в этот фрагмент кода, чтобы правильно настроить 2 полностью отдельных постоянных хранилища?

2) как я могу получить доступ к желаемому контексту, который относится к (например, store1), я обычно использую managedObjectStore1.mainQueueManagedObjectContext]?

заранее спасибо.

p.s. в applicationDidFinishLaunchingWithOptions я должен стереть все данные из хранилища 2, просто удалив файл sqlite с помощью NSFileManager и создав новый чистый, кто-то может спросить, зачем тогда сохранять данные? поскольку использование in-memory NSObjects убьет память iPhone, в моем случае нужно работать с несколькими тысячами записей.


person JAHelia    schedule 28.06.2013    source источник
comment
Зачем вам нужны два совершенно разных стека RestKit / CoreData? Разве не достаточно двух постоянных хранилищ?   -  person Rivera    schedule 25.09.2014


Ответы (1)


У вас не будет одного постоянного координатора магазина, у вас будет два. Просто скопируйте свой код и получите 2 хранилища всех деталей, назовите их разумно и получите доступ к MOC через соответствующий managedObjectStore, как вы это делаете сейчас. Единственная слегка сложная вещь - это то, как вы получаете доступ к managedObjectStore, потому что сейчас вы не можете использовать хранилище по умолчанию, предоставленное RestKit. Вы должны использовать свой собственный синглтон для хранения ваших контекстов и предоставления общедоступных методов для синглтона.

person Wain    schedule 28.06.2013
comment
Можно ли иметь ManagedObjectStore как свойство AppDelegate, чтобы я мог получить к нему доступ во всем приложении? И нецелесообразно иметь координаторов, как я знаю, координатор координирует между постоянными хранилищами. - person JAHelia; 28.06.2013
comment
Вы можете использовать делегат приложения, но он не для этого. Многие так поступают, но это плохая практика. У вас должно быть 2 разных координатора, так как у вас есть 2 разные модели данных кода. - person Wain; 28.06.2013