Ios 如何将RKMappingResult对象保存到RestKit中的核心数据?
我尝试将从服务器获取的核心数据NSManagedObject保存到其中。但我不知道如何将Ios 如何将RKMappingResult对象保存到RestKit中的核心数据?,ios,objective-c,cocoa-touch,core-data,restkit,Ios,Objective C,Cocoa Touch,Core Data,Restkit,我尝试将从服务器获取的核心数据NSManagedObject保存到其中。但我不知道如何将成功块中的[mappingResult firstObject]得到的对象保存到核心数据。我该怎么做?我应该使用RKObjectManager的postObject还是RKManagedRequestOperation?在此之前是否应该执行[managedObjectContext insertNewObjectForEntityForName:@”“]?我在官方文档中找不到有关此案例的任何说明,需要一些帮助
成功块中的[mappingResult firstObject]得到的对象保存到核心数据。我该怎么做?我应该使用RKObjectManager的postObject
还是RKManagedRequestOperation
?在此之前是否应该执行[managedObjectContext insertNewObjectForEntityForName:@”“]
?我在官方文档中找不到有关此案例的任何说明,需要一些帮助。
**编辑:**我初始化RKManagedRequestOperation
如下:
RKResponseDescriptor* responseDescriptor =[RKResponseDescriptor
responseDescriptorWithMapping:[UserMapping mappingForUser]
method:RKRequestMethodPOST
pathPattern:kUserEndpoint
keyPath:@"profile"
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
RKRequestDescriptor* requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:[UserMapping mappingForUserProfileModel]
objectClass:[User class] rootKeyPath:@"profile" method:RKRequestMethodPOST];
[[RKObjectManager sharedManager] addRequestDescriptor:requestDescriptor];
[[RKObjectManager sharedManager] addResponseDescriptor:responseDescriptor];
userObject = [User new];
NSDictionary* userParameters = @{ @"user_id" : [User sharedUser].userId};
[[RKObjectManager sharedManager] appropriateObjectRequestOperationWithObject:resumeObject method:RKRequestMethodPOST
path:kUserEndpoint
parameters:userParameters];
RKManagedObjectRequestOperation* managedRequest = [[RKManagedObjectRequestOperation alloc]
initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@", kService, kUserEndpoint]]]
responseDescriptors:@[responseDescriptor]];
managedRequest.managedObjectContext = _managedObjectContext;
[managedRequest setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
NSLog(@"MAPPING = %@", [mappingResult firstObject]);
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
}];
[[RKObjectManager sharedManager] enqueueObjectRequestOperation:managedRequest];
EDIT2:RestKit不会将映射数据保存到CoreData。但是userObject.title保存得非常完美:
userObject = [_managedObjectContext insertNewObjectForEntityForName:@"User"];
userObject.title = @"USER_NAME";
NSDictionary* userParameters = @{ @"user_id" : [User sharedUser].userId};
[[RKObjectManager sharedManager] postObject:userObject path:kUserEndpoint parameters:userParameters
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
} failure:^(RKObjectRequestOperation *operation, NSError *error) { }];
你需要后退一步,因为你的建议是在黑暗中提出的
如果您使用托管对象存储配置对象管理器,并使用实体映射创建响应描述符,则当您收到请求产生的数据时,这些响应描述符将转换为托管对象。在调用成功块之前,这些对象将自动保存到核心数据存储中
要创建的任何其他对象都可以像往常一样创建,并且需要显式保存上下文
使用RestKit发送请求本身不会更改存储内容,只有响应会导致更改。您需要后退一步,因为您的建议是在黑暗中拍摄的
如果您使用托管对象存储配置对象管理器,并使用实体映射创建响应描述符,则当您收到请求产生的数据时,这些响应描述符将转换为托管对象。在调用成功块之前,这些对象将自动保存到核心数据存储中
要创建的任何其他对象都可以像往常一样创建,并且需要显式保存上下文
使用RestKit发送请求本身不会更改存储内容,只有响应会导致更改。请参阅本教程。有一个将RestKit与对象管理和代码数据一起使用的示例
参见本教程。有一个将RestKit与对象管理和代码数据一起使用的示例
感谢您的快速回复,但我有一些问题:“在调用成功块之前,这些对象将自动保存到核心数据存储。”。我怎么知道这件事?如何检索它们?以及如何为此初始化RKManagedRequestOperation?您可以像往常一样检索它们-获取请求(它们也在映射结果中提供)。RKManagedRequestOperation用于向服务器发送请求,该服务器将使用响应数据创建托管对象……您能告诉我如何为此初始化RKManagedRequestOperation
。查看我的编辑我是如何做到这一点的-我有一个异常实体(null)不符合键“name”
的键值编码,但我的实体有它。听起来你的代码数据堆栈设置不正确。为什么要使用RKManagedObjectRequestOperation
?您的代码看起来不需要,您可以使用管理器…“为什么要使用RKManagedObjectRequestOperation?”因为用户是NSManagedObject
子类…感谢您的快速响应,但我有一些问题:“在调用成功块之前,这些对象将自动保存到核心数据存储。”。我怎么知道这件事?如何检索它们?以及如何为此初始化RKManagedRequestOperation?您可以像往常一样检索它们-获取请求(它们也在映射结果中提供)。RKManagedRequestOperation用于向服务器发送请求,该服务器将使用响应数据创建托管对象……您能告诉我如何为此初始化RKManagedRequestOperation
。查看我的编辑我是如何做到这一点的-我有一个异常实体(null)不符合键“name”
的键值编码,但我的实体有它。听起来你的代码数据堆栈设置不正确。为什么要使用RKManagedObjectRequestOperation
?您的代码看起来不需要,您可以使用管理器…“为什么要使用RKManagedObjectRequestOperation?”因为用户是NSManagedObject
子类。。。