ios - 如何保存到RestKit中的Core Data RKMappingResult对象?

标签 ios objective-c cocoa-touch core-data restkit

我尝试保存到我从服务器获得的核心数据 NSManagedObject。但是我不知道如何将从 success block 中的 [mappingResult firstObject] 获取的对象保存到 Core Data。我怎样才能做到这一点?我应该使用 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) { }];

最佳答案

你需要退后一步,因为你的建议是在黑暗中拍摄的。

如果您使用托管对象存储配置您的对象管理器并创建带有实体映射的响应描述符,那么当您接收到作为请求结果的数据时,这将被转换为托管对象。在调用成功 block 之前,这些对象将自动保存到核心数据存储中。

您想要创建的任何其他对象都可以像往常一样创建,您需要显式保存上下文。

使用 RestKit 发送请求本身不会更改存储内容,只有响应会导致更改。

关于ios - 如何保存到RestKit中的Core Data RKMappingResult对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21295483/

相关文章:

ios - 在 Objective-C 中,当我没有在我的应用程序中的任何地方指定线程时,代码在哪里执行?

ios - 如何在排序数组中将一行代码从 Objective-C 转换为 Swift?

ios - UIPickerView 没有出现

ios - 如何将 NSDictionary 值存储到 NSArray?

ios - 如何使用按钮根据页码播放不同的声音?

iphone - 来自相机的 AVCaptureSession CVImageBufferRef 上的图层 OpenGL 内容

ios - unichar characterAtIndex 具有特定字符

ios - swift:UIImageView 上的手势识别器不起作用

iphone - MKMapView 缩放和区域

iphone - View Controller 继承。找不到接口(interface)