从核心数据中的两个独立实体中删除记录

时间:2014-05-21 19:52:13

标签: ios core-data ios7

我所知道的

1:在事务或视图期间,我能够从单个实体(表)中删除记录 - 成功:)

我想做什么

  • 实体(表)1:库存(名称类型购买日期........ 分类名称)
  • 实体(表格)2:类别(类别名称,类别类型)

在类别视图的代码中当我删除类别时,我希望删除相应的库存项目;

我知道我可以为此删除设置一些关系,但我无法找到一个好的链接或一个例子,我无法应用该规则

这是我的代码

(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
     {

 PIMCategoryListCellTableViewCell *cell = (PIMCategoryListCellTableViewCell*) [tableView cellForRowAtIndexPath:indexPath];

if (editingStyle == UITableViewCellEditingStyleDelete) {
    // [self.tblView beginUpdates];
    NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
    //Records from Category entity(table) deleted  -- Success So far 
    [context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];


    NSError *error = nil;
    if (![context save:&error]) {

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }


   // Use the fetch result controller to get the corresponding item of same category 
    self.fetchedResultsControllerCategory = nil;
        [self fetchedResultsControllerItem:cell.categoryName.text];
        NSUInteger count = [self.fetchedResultsControllerCategory.fetchedObjects count];
        //this way I know if any item are present for the category 
         if (count> 0)
        {

      NSManagedObjectContext  *contextN = [self.fetchedResultsControllerCategory managedObjectContext];


            NSIndexPath *i;

            for ( i.row =0 ; i==1;i++ )
            {

           [contextN deleteObject:[self.fetchedResultsControllerCategory  ob ];

            }

            //     @property (strong, nonatomic) id detailItem;
       //  [contextN deleteObject:[self.fetchedResultsControllerCategory ob ];



       //[contextN reset]
        NSError *error = nil;
        if (![contextN save:&error]) {
            // Replace this implementation with code to handle the error appropriately.
            // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();

            // [self.tblView endUpdates];
        }

        }}

现在我尝试更改上下文但仍无法删除第二个实体(表)记录

任何建议,;如果您需要更多解释,请告诉我

2 个答案:

答案 0 :(得分:0)

您需要在核心数据编辑器中设置关系。

从库存中删除“类别名称”属性,而是创建与“类别”的关系。 (以及从类别到库存的反比关系)

然后,您可以将类别关系的删除规则设置为“级联”,然后在删除类别后立即删除任何相关的广告资源。screenshot of relationship in core data editor

答案 1 :(得分:0)

好的,让我们把事情弄清楚,你有两个实体,即库存和类别。

每个类别都有很多库存,如果用户删除类别,则所有库存都应自动删除。

这样做非常简单,可以在XCODE的模型编辑器中完成。

创建两个实体后,只需将关系从一个实体拖到另一个实体。 双击它所说的位置,newRelationship并给出你的关系名称。 选择类别上的关系,然后单击左上角的模型编辑器,将TYPE更改为MANY。同时将删除规则更改为 - CASCADE。 查看我附带的图像,以了解这一切。 然后,您可以使用传统的托管对象上下文方法来删除类别,它应该自动删除与该类别关联的清单。 enter image description here