2013-04-16 3 views
3

J'essaie de mettre à jour mon application existante qui utilisait Restkit 0.1 à 0.20, mais je rencontre des problèmes lors de la configuration de la pile de données de base car elle s'exécute dans une exception.Initialisation des données de base en utilisant RestKit 0.20

J'ai le code suivant sur mon AppDelegate:

 /* 
    Complete Core Data stack initialization 
    */ 
    NSError *error = nil; 
    NSURL *modelURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"AppModel" 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]; 
    [managedObjectStore createPersistentStoreCoordinator]; 
    NSString *storePath = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"TSI.sqlite"]; 
    NSString *seedPath = [[NSBundle mainBundle] pathForResource:@"RKSeedDatabase" ofType:@"sqlite"]; 
    //NSPersistentStore __unused *persistentStore = [managedObjectStore addInMemoryPersistentStore:&error]; 
    NSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:storePath fromSeedDatabaseAtPath:seedPath withConfiguration:nil options:nil error:&error]; 
    NSAssert(persistentStore, @"Failed to add persistent store with error: %@", error); 
    /* 
    RESTKIT 
    */ 
    // Create the managed object contexts 
    [managedObjectStore createManagedObjectContexts]; 
    managedObjectStore.managedObjectCache = [[RKInMemoryManagedObjectCache alloc] initWithManagedObjectContext:managedObjectStore.persistentStoreManagedObjectContext]; 

Et puis mes correspondances sont définies dans le TableViewController selon:

RKManagedObjectStore *managedObjectStore = [RKManagedObjectStore defaultStore]; 
    NSManagedObjectContext* context = [managedObjectStore mainQueueManagedObjectContext]; 

    NSString *rootKeyPath; 
    rootKeyPath = @"body"; 
    NSString *endpoint = @"account/login.json"; 
    RKEntityMapping *entityMapping = [RKEntityMapping mappingForEntityForName:@"User" inManagedObjectStore:managedObjectStore]; 
    [entityMapping addAttributeMappingsFromDictionary:@{ 
    @"api_token":@"token", 
    @"email": @"email", 
    @"first_name": @"name", 
    @"last_name": @"surname" 
    }]; 
    RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:entityMapping pathPattern:endpoint keyPath:rootKeyPath statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[TSI_SERVER stringByAppendingString:endpoint]]]; 
    RKManagedObjectRequestOperation *managedObjectRequestOperation = [[RKManagedObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[ responseDescriptor ]]; 
    //managedObjectRequestOperation.managedObjectContext = self.managedObjectContext; 
    [[NSOperationQueue currentQueue] addOperation:managedObjectRequestOperation]; 

Mais chaque fois que je tente de récupérer les données après que la vue soit chargée, j'obtiens l'erreur suivante dans la console (pour des raisons de sécurité, j'ai masqué le nom et le serveur utilisés par mon application):

2013-04-16 14:41:50.576 <<MyApp>>[4525:907] I restkit:RKLog.m:34 RestKit logging initialized... 
2013-04-16 14:41:51.009 <<MyApp>>[4525:907] [HEATMA.PS] Running Heatma.ps version 4.0.2. For help go to www.heatma.ps/support 
2013-04-16 14:42:54.464 <<MyApp>>[4525:3907] *** Assertion failure in 
-[RKManagedObjectResponseMapperOperation performMappingWithObject:error:], /Users/manuel_matute/Code/RestKit/Code/Network/RKResponseMapperOperation.m:358 
2013-04-16 14:42:59.876 <<MyApp>>[4525:3907] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Unable to perform mapping: No `managedObjectContext` assigned. (Mapping response.URL = http://www.<<myserver>>.com/rest/account/login.json)' 
*** First throw call stack: (0x32a7b2a3 0x3a7a397f 0x32a7b15d 0x33350ab7 0xe37e1 0xe1b97 0x333085c1 0x33380be3 0x3abbb11f 0x3abbf961 0x3abbfac1 0x3abefa11 0x3abef8a4) libc++abi.dylib: terminate called throwing an exception 

Est-ce que quelqu'un a une idée de ce qui pourrait être le problème?

Merci!

Répondre

6

Résolu!

On dirait que je devais attribuer explicitement le contexte au managedObjectRequestOperation comme:

managedObjectRequestOperation.managedObjectContext = context; 
Questions connexes