objective-c – 禁用撤消以创建删除NSManagedObject

objective-c – 禁用撤消以创建删除NSManagedObject,第1张

概述在我的Core Data模型中,我有一个名为listItems的关系,它链接到几个listItem实体,每个实体都有一个stringValue属性.我创建了一个控件,它本质上是一个NSTextField列表,每个列表项对应一个.控件正确地绑定到listItems,并且我已将其设置为按下返回键,直接在当前编辑的字段下创建一个新字段,并将焦点更改为新字段.因此,基本上,要添加新项目,用户按下Retur 在我的Core Data模型中,我有一个名为ListItems的关系,它链接到几个ListItem实体,每个实体都有一个stringValue属性.我创建了一个控件,它本质上是一个NSTextFIEld列表,每个列表项对应一个.控件正确地绑定到ListItems,并且我已将其设置为按下返回键,直接在当前编辑的字段下创建一个新字段,并将焦点更改为新字段.因此,基本上,要添加新项目,用户按下Return.

同样,如果用户结束编辑并且当前编辑的字段为空,则删除该字段(如图所示,空字段仅在“编辑模式”期间出现,可以这么说).这非常有效.基本上,在我的ListItem NSManagedobject子类中,我执行以下 *** 作:

// Don't allow nil valuesif (!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,但我怀疑在该方法之前可能会发生撤消注册)

解决方法 如果你更深入地深入了解核心数据文档,你会发现这个花絮被隐藏起来:

[[self managedobjectContext] processpendingChanges];[[[self managedobjectContext] undoManager] disableundoRegistration];// Do your work[[self managedobjectContext] processpendingChanges];[[[self managedobjectContext] undoManager] enableundoRegistration];

在事件循环结束之前,通常不会在撤消管理器中注册更改,因此在重新启用撤消注册后进行注册.以上情况迫使它在你想要的时候发生.

总结

以上是内存溢出为你收集整理的objective-c – 禁用撤消以创建/删除NSManagedObject全部内容,希望文章能够帮你解决objective-c – 禁用撤消以创建/删除NSManagedObject所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1034349.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存