Alan
Alan

Reputation: 796

RestKit 2.0 Removing RKManagedObjectStore but keeping NSManagedObjectModel

I have a project set up where all data coming from the Server is wrote to a Core Data managed store using a managed model. I have all my entities generated from the Core Data model using mogenerator. I have all RestKit mapping integrated in to my entities.

NSError *error = nil;
NSURL *modelURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"dataModel" ofType:@"momd"]];

// NOTE: Due to an iOS 5 bug, the managed object model returned is immutable.
NSManagedObjectModel *managedObjectModel = [[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL] mutableCopy];
RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];

// Initialize the Core Data stack
[managedObjectStore createPersistentStoreCoordinator];

NSPersistentStore __unused *persistentStore = [managedObjectStore addInMemoryPersistentStore:&error];
NSAssert(persistentStore, @"Failed to add persistent store: %@", error);

[managedObjectStore createManagedObjectContexts];

// Set the default store shared instance
[RKManagedObjectStore setDefaultStore:managedObjectStore];

Now there has been a change of plan due to time constraints. The data should not be stored at all. The data should be read from the server and displayed directly. No saving, no persisting. So I would like to cut out the RKManagedObjectStore, keep the entities and mappings, and read the data from 'RKMappingResult *mappingResult' when a request succeeds or a RKPaginator resutl. Example that works with RKManagedObjectStore and RKPaginator:

[objectManager addResponseDescriptor:[RKResponseDescriptor responseDescriptorWithMapping:[Friend entityMapping:objectManager.managedObjectStore]
                                                                                      method:RKRequestMethodAny
                                                                                 pathPattern:nil
                                                                                     keyPath:@"items"
                                                                                 statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]];

    [objectManager setPaginationMapping:[self paginationMapping]];
    self.paginator = [objectManager paginatorWithPathPattern:@"data"];
    self.paginator.perPage = 20;

    //Set completion block for this paginator
    [self.paginator setCompletionBlockWithSuccess:^(RKPaginator *paginator, NSArray *objects, NSUInteger page) {

        [weakSelf.dataArray addObjectsFromArray:objects];
    } failure:^(RKPaginator *paginator, NSError *error) {

    }];

However, when I start to reomve the RKManagedObjectStore I start to run into problems when mapping.

'You must provide a managedObjectStore. Invoke mappingForClass:inManagedObjectStore: instead.'

Q.1 Can I use Enitiy Mapping without RKManagedObjectStore? Am I going in the right direction.

Q.2 Can I remove the store and keep the model?

Any tips, help or examples would be great before I get too involved and go in the wrong direction. Thanks Al

Upvotes: 0

Views: 332

Answers (1)

Wain
Wain

Reputation: 119031

You should fight against the requirement change and use Core Data as a temporary cache of information to aid with memory management (so you can scroll up and down lists without having to have everything loaded all the time). This should not take any longer to implement...

  1. No, you can't use RKEntityMapping without an RKManagedObjectStore.
  2. You could keep the model but you wouldn't be able to use it (managed objects need to be created in association with a MOC).

Upvotes: 2

Related Questions