为什么在与我的实体创建关系时会随机调用我的NSFetchedResultsControllerDelegate方法?

时间:2016-06-09 08:59:51

标签: ios core-data nsfetchedresultscontroller magicalrecord

我无法调试NSFetchedResultsControllerDelegate行为。

我的NSFetchedResultsController有一个关于Object1实体的获取请求。无论何时触摸单元格,我都会创建(并保存)与Object2实体的新关系(如果已存在则使用)。

我的问题是controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:在创建这样的关系时被随机调用(意思是,有时它被调用,有时它不会被调用)。

我的代码创建关系正在使用MagicalRecord

+ (void)createOrUpdateRelationship:(NSDictionary *)userInfo
                             forObject1:(NSManagedObject1 *)object1 {
    [MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
        NSManagedObject2 *object2 = [NSManagedObject2 fetchObject2ForObject1WithID:object1.ID
                                                                                       inContext:localContext];
        if (!object2) {
            object2 = [NSManagedObject2 MR_createEntityInContext:localContext];
            object2.createdAt = [NSDate date];
        }

        object2.updatedAt = [NSDate date];
        // Store attributes from userInfo

        object2.object1 = [object1 MR_inContext:localContext];
    } completion:^(BOOL contextDidSave, NSError *error) {
        // Celebrate
    }];
}

知道我能做错什么吗?

1 个答案:

答案 0 :(得分:0)

Dirty Henry,

Object1与Object2具有一对一的关系,而Object2与Object1具有反向关系:)

因此,每当您更改任何这些对象的关系值时,其他对象也将被修改:)因此NSFetchedResultsController被触发:)这很常见:)

您无法跳过这些更改。

{{1}}