Core data Restkit映射问题-将新创建的托管对象发布到服务器
我试图使用rest工具包将新的托管对象发布到服务器,但我不知道我做错了什么。我遇到了如下异常: 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“Core data Restkit映射问题-将新创建的托管对象发布到服务器,core-data,http-post,restkit,restkit-0.20,Core Data,Http Post,Restkit,Restkit 0.20,我试图使用rest工具包将新的托管对象发布到服务器,但我不知道我做错了什么。我遇到了如下异常: 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“RKRequestDescriptor对象必须使用其目标类为NSMutableDictionary,获得“用户”(请参见[RKObjectMapping requestMapping])的映射进行初始化” 我在堆栈溢出帖子中寻找解决方案,比如 这是MappingProvider类中的实体映射方法: +(RK
RKRequestDescriptor
对象必须使用其目标类为NSMutableDictionary
,获得“用户”(请参见[RKObjectMapping requestMapping]
)的映射进行初始化”
我在堆栈溢出帖子中寻找解决方案,比如
这是MappingProvider类中的实体映射方法:
+(RKMapping *)usersMapping
{
RKEntityMapping *mapping = [RKEntityMapping mappingForEntityForName:@"Users" inManagedObjectStore:[[DateModel sharedDataModel]objectStore]];
[mapping addAttributeMappingsFromDictionary:@{
@"id": @"user_id",
@"address1": @"address1",
@"address2": @"address2",
@"created_at":@"created_at",
@"updated_at": @"updated_at",
@"email": @"email",
@"name":@"name",
@"password_digest": @"password_digest",
@"phone_no": @"phone_no",
@"postcode":@"postcode",
@"remember_token":@"remember_token",
@"user_type": @"user_type",
@"apns_token":@"apns_token"
}
];
[mapping addRelationshipMappingWithSourceKeyPath:@"admins" mapping:[MappingProvider adminsMapping]];
[mapping addRelationshipMappingWithSourceKeyPath:@"carers" mapping:[MappingProvider carersMapping]];
[mapping addRelationshipMappingWithSourceKeyPath:@"customers" mapping:[MappingProvider customersMapping]];
[mapping addRelationshipMappingWithSourceKeyPath:@"userWearers" mapping:[MappingProvider customersMapping]];
return mapping;
这是当用户填写所有文本字段并单击“注册”按钮时调用的方法:
-(void)registerUser
{RKResponseDescriptor *userResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:[MappingProvider usersMapping] method:RKRequestMethodPOST pathPattern:nil keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
//here Xcode return exception
RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:[MappingProvider usersMapping] objectClass:[Users class] rootKeyPath:nil method:RKRequestMethodPOST];
[[DateModel sharedDataModel]addResponseDescriptor:userResponseDescriptor];
[[DateModel sharedDataModel]addRequestDescriptor:requestDescriptor];
RKManagedObjectStore *objectStore = [[DateModel sharedDataModel]objectStore];
Users *user = [NSEntityDescription insertNewObjectForEntityForName:@"Users" inManagedObjectContext:objectStore.mainQueueManagedObjectContext];
user.email = _email;
user.password_digest =_password;
user.name = _name;
user.address1 = _address;
user.postcode = [NSNumber numberWithInteger:[_postcode integerValue]];
user.phone_no = [NSNumber numberWithInteger:[_mobileNumber integerValue]];
[[RKObjectManager sharedManager] postObject:user path:nil parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
NSLog(@"Success saving user");
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"Failure saving user: %@", error.localizedDescription);
}];
}
日期模型设置方法:
- (void)setup {
self.objectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSString *path = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"Data.sqlite"];
NSLog(@"Setting up store at %@", path);
[self.objectStore addSQLitePersistentStoreAtPath:path
fromSeedDatabaseAtPath:nil
withConfiguration:nil
options:[self optionsForSqliteStore]
error:nil];
[self.objectStore createManagedObjectContexts];
//Configure a managed object cache to ensure we do not create duplicate objects
self.objectStore.managedObjectCache =[[RKInMemoryManagedObjectCache alloc]initWithManagedObjectContext:self.objectStore.persistentStoreManagedObjectContext];
// Set the default store shared instance
[RKManagedObjectStore setDefaultStore:self.objectStore];
}请求描述符的目的是将自定义对象转换为
NSMutableDictionary
,以便可以序列化和发送它。当前使用的映射用于转换为Users
对象,因此需要使用不同的映射
RestKit提供了一种方便的方法,您可以使用:
... requestDescriptorWithMapping:[[MappingProvider usersMapping] inverseMapping] ...
请求描述符的用途是将自定义对象转换为
NSMutableDictionary
,以便可以序列化和发送它。当前使用的映射用于转换为Users
对象,因此需要使用不同的映射
RestKit提供了一种方便的方法,您可以使用:
... requestDescriptorWithMapping:[[MappingProvider usersMapping] inverseMapping] ...