【问题标题】:Using RKManagedObjectRequestOperation with getObjectsAtPath将 RKManagedObjectRequestOperation 与 getObjectsAtPath 一起使用
【发布时间】:2026-02-05 06:55:01
【问题描述】:

我正在 iOS 上使用 RestKit 开发一个待办事项列表应用程序,我添加了一个获取结果块,用于从此链接 (http://restkit.org/api/latest/Classes/RKManagedObjectRequestOperation.html) 的官方类引用中删除孤立对象

现在文档说,无论何时执行任何RKManagedObjectRequestOperations,获取结果块都会检查孤立对象并自动删除服务器上不存在的对象。

我正在使用以下代码发出请求,但问题是 getObjectsAtPath 创建 RKObjectRequestOperation 并且我需要 RKManagedObjectRequestOperation 任何人都可以指导我在这种情况下该怎么做?

使用RKObjectRequestOperation,如果服务器上不再存在孤立对象,则不会将其删除。

[[RKObjectManager sharedManager] getObjectsAtPath:@"/api/lists"
                                       parameters:nil
                                          success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) ...

映射:

RKEntityMapping *listEntityMapping = [RKEntityMapping mappingForEntityForName:@"List" inManagedObjectStore:managedObjectStore];

响应描述符:

responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:listEntityMapping method:RKRequestMethodGET pathPattern:@"/api/lists" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

JSON:

[
    {
        "list_id": "1",
        "listName": "List Name 1"
    },
    {
        "list_id": "2",
        "listName": "List Name 2"
    },
    {
        "list_id": "5",
        "listName": "List Name 3"
    },
    {
        "list_id": "7",
        "listName": "List Name 4"
    },
    {
        "list_id": "8",
        "listName": "List Name 5"
    },
    {
        "list_id": "11",
        "listName": "List Name 6"
    },
    {
        "list_id": "12",
        "listName": "List Name 7"
    }
]

【问题讨论】:

    标签: ios restkit restkit-0.20


    【解决方案1】:

    如果你得到的是RKObjectRequestOperation 而不是RKManagedObjectRequestOperation,那么你使用了错误的映射。该操作是根据与请求 URL 路径模式匹配的映射来选择的,该映射是对象或实体映射。在您的情况下,您的映射需要是 RKEntityMapping 实例。

    【讨论】:

    • 但 getObjectsAtPath 文档说它将创建一个 RKObjectRequestOperation
    • 我正在使用 RKEnitityMapping,如下代码行 RKEntityMapping *listEntityMapping = [RKEntityMapping mappingForEntityForName:@"List" inManagedObjectStore:managedObjectStore];
    • 什么是请求 URL 以及使用该映射的相应响应描述符?
    • 附注RKManagedObjectRequestOperationRKObjectRequestOperation 的子类
    • 这就是问题所在。这里的一切似乎都很好。
    【解决方案2】:

    我认为您没有正确配置管理器以使用 CoreData(并创建 NSManagedObjects 而不是 NSObjects)。确保在要用于下载 CoreData 支持的对象的管理器上设置 managedObjectStore

    http://restkit.org/api/latest/Classes/RKObjectManager.html#task_Configuring%20Core%20Data%20Integration

    【讨论】:

    • 我使用了RestKit网站提供的例子