1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
// Configure core data to works with RESTkit
NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];
NSString *path = [RKApplicationDataDirectory() stringByAppendingPathComponent:BAOBAB_DB_NAME];
[managedObjectStore addSQLitePersistentStoreAtPath:path fromSeedDatabaseAtPath:nil withConfiguration:nil options:nil error:nil];
[managedObjectStore createManagedObjectContexts];
RKObjectManager *manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:REST_SERVER_URL]];
manager.managedObjectStore = managedObjectStore;
[managedObjectStore.persistentStoreManagedObjectContext setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];
//managedObjectStore.managedObjectCache = [[RKInMemoryManagedObjectCache alloc] initWithManagedObjectContext:managedObjectStore.persistentStoreManagedObjectContext];
// Object Mapping
RKObjectMapping *userRequestMapping = [RKObjectMapping requestMapping];
[userRequestMapping addAttributeMappingsFromDictionary:@{
@"userID" : @"id",
@"name" : @"name",
@"phone" : @"phone",
@"email" : @"email",
@"city" : @"city",
@"address" : @"address",
@"password" : @"password"
}];
RKEntityMapping* userResponseMapping = [RKEntityMapping mappingForEntityForName:@"BUser" inManagedObjectStore:manager.managedObjectStore];
[userResponseMapping addAttributeMappingsFromDictionary:@{
@"id" : @"userID",
@"name" : @"name",
@"address" : @"address",
@"password" : @"password",
@"phone" : @"phone",
@"email" : @"email",
@"token" : @"token",
@"is_activated" : @"isActivated",
@"has_contacts_rights" : @"hasContactsRights",
@"city" : @"city",
@"activation_code" : @"activationCode"
}];
userResponseMapping.identificationAttributes = @[@"userID"];
NSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful); // Anything in 2xx
RKRequestDescriptor *userRequestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:userRequestMapping objectClass:[BUser class] rootKeyPath:@"user"];
RKResponseDescriptor *userResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:userResponseMapping pathPattern:@"/user" keyPath:nil statusCodes:statusCodes];
RKResponseDescriptor *userLoadResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:userResponseMapping pathPattern:@"/user/:userID" keyPath:nil statusCodes:statusCodes];
// Mapping errors
NSIndexSet *statusCodesErrors = RKStatusCodeIndexSetForClass(RKStatusCodeClassClientError);
RKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[RKErrorMessage class]];
[errorMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"errorMessage"]];
RKResponseDescriptor *errorDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:errorMapping pathPattern:nil keyPath:@"errors" statusCodes:statusCodesErrors];
[manager addRequestDescriptor:userRequestDescriptor];
[manager addResponseDescriptor:userResponseDescriptor];
[manager addResponseDescriptor:userLoadResponseDescriptor];
[manager addResponseDescriptor:errorDescriptor]; |
Partager