iOS - Reskit:删除孤立对象

时间:2013-10-03 10:17:10

标签: ios objective-c core-data

我遇到了ResKit用于管理孤立对象的问题,当从同一个webService收到的JSON必须映射到多个实体时。

我已按照此处的示例http://restkit.org/api/latest/Classes/RKManagedObjectRequestOperation.html(在“删除孤立对象”部分下),我可以删除孤立对象,但仅限于单个实体。

让我们看一些代码......

以下是我从webService收到的(小部分)JSON。

{
    "families": [
        {
            "id": "000",
            "desc": "desc_1"
        },
        {
            "id": "001",
            "desc": "desc_2"
        }
    ],
    "categories": [
        {
            "id": "00000000",
            "desc": "test"
            ....//others attributes
        },
        {
            "id": "00000001",
            "desc": "test"
            ....//others attributes
        }
    ]
}

我正确地将此JSON映射到2个不同的实体:Category和Family。

现在,根据我的理解,我可以通过向我的RKObjectManager添加FetchRequestBlock来删除孤立对象(不再从服务器接收的对象)。

以下是我如何定义它:

[objectManager addFetchRequestBlock:^NSFetchRequest *(NSURL *URL) {
    RKPathMatcher* pathMatcher = [RKPathMatcher pathMatcherWithPattern:@"getData.asp"];

    NSDictionary *dic = nil;
    if ([pathMatcher matchesPath:[URL relativePath] tokenizeQueryStrings:YES parsedArguments:&dic]) {

    NSFetchRequest *fetchRequest = [NSFetchRequest new];

    NSEntityDescription *entity = [NSEntityDescription
        entityForName:@"Family" inManagedObjectContext: managedObjectStore.mainQueueManagedObjectContext];
    fetchRequest.entity = entity;
    return fetchRequest;
} else
    return nil;
}];

我的问题:正如您所看到的,在FetchRequestBlock中,我只定义了实体“Family”,但我想在同一个块中删除“Category”实体的孤立对象。 ..这可能吗 ?或者我必须创建另一个仅与实体名称不同的类似块?

是否有方法在FetchRequestBlock中添加“keyPath”(如本例中的“categories”或“系列”),以便我可以确保删除正确的NSManagedObject?或者这是不必要的?

修改

为了完成,我添加了一些代码,所以我认为你可以更好地理解我正在做的事情(如果我做错了,请纠正我......)

以下是我如何定义RKResponseDescriptor,我可以正确地将它与“KeyPath”相关联:

//Categories
RKResponseDescriptor *categoriesDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:categoriesMapping 
    method:RKRequestMethodGET 
    pathPattern:@"getData.asp" keyPath:@"categories" 
    statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

//Families
RKResponseDescriptor *familiesDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:familiesMapping 
    method:RKRequestMethodGET 
    pathPattern:@"getData.asp" keyPath:@"families" 
    statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

我使用以下代码从webService检索数据:

[[RKObjectManager sharedManager] getObjectsAtPath:@"getData.asp" parameters:@{kAuthKeyName : kAuthKeyValue} success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
    //Success block

    //Before entering in this block, I can see with debug that ResKit try to 
    //automatically delete objects that return from the "FetchRequestBlock" defined in above code...
}failure:^(RKObjectRequestOperation *operation, NSError *error) {
    //Failure Block
}];

0 个答案:

没有答案