【问题标题】:Disable undo for creation/deletion of NSManagedObject禁用撤消创建/删除 NSManagedObject
【发布时间】:2010-10-21 06:49:04
【问题描述】:

在我的核心数据模型中,我有一个名为listItems 的关系,它链接到多个listItem 实体,每个实体都有一个stringValue 属性。我创建了一个控件,它本质上是一个NSTextFields 列表,每个列表项一个。该控件已正确绑定到listItems,并且我已对其进行了设置,以便按下回车键在当前编辑的字段正下方创建一个新字段并将焦点更改为新字段。因此,本质上,要添加一个新项目,用户需要按下 Return 键。

同样,如果用户结束编辑并且当前编辑的字段为空,则该字段被删除(例如,空字段仅在“编辑模式”期间出现,可以这么说)。这工作得很好。基本上,在我的listItem NSManagedObject 子类中,我执行以下操作:

// Don't allow nil values
if (!value && [[self.recipe ingredients] count] > 1) {
    for (EAIngredientRef *ingredient in [self.recipe ingredients]) {
        if ([[ingredient sortIndex] integerValue] > [[self sortIndex] integerValue]) {
            [ingredient setSortIndex:[NSNumber numberWithInteger:([[ingredient sortIndex] integerValue]-1)]];
        }
    }
    [[self managedObjectContext] deleteObject:self];
    return;
}

// Code to handle if it is a real value

我遇到的问题是,每次以这种方式删除一行时,它都会向 undoManager 注册。因此,如果我编辑一行,按 Return(这会创建一个新行),然后单击以结束编辑,该行就会消失。但是,如果我随后撤消,则空字段会重新出现。我的目标是让 undoManager 忽略涉及空字段的删除操作。

我该怎么做呢?我已经尝试在几个地方使用[[[self managedObjectContext] undoManager] disableUndoRegistration] 和关联的enableUndoRegistration(例如-didTurnIntoFault,但我怀疑撤消注册可能在该方法之前发生)

【问题讨论】:

    标签: objective-c cocoa core-data undo


    【解决方案1】:

    如果您更深入地研究 Core Data 文档,您会发现这个花絮:

    [[self managedObjectContext] processPendingChanges];
    [[[self managedObjectContext] undoManager] disableUndoRegistration];
    // Do your work
    [[self managedObjectContext] processPendingChanges];
    [[[self managedObjectContext] undoManager] enableUndoRegistration];
    

    在事件循环结束之前,通常不会向撤消管理器注册更改,因此在您重新打开撤消注册之后进行注册。以上强制它在你想要的时候发生。

    【讨论】:

      猜你喜欢
      • 2016-10-14
      • 2017-02-09
      • 1970-01-01
      • 2017-04-17
      • 2017-07-26
      • 2012-01-07
      • 2012-03-17
      • 1970-01-01
      相关资源
      最近更新 更多