小编Mat*_*all的帖子

禁用撤消以创建/删除NSManagedObject

在我的核心数据模型中,我有一个关系,称为listItems链接到几个listItem实体,每个实体都有一个stringValue属性.我创建了一个控件,它实际上是一个列表NSTextFields,每个列表项都有一个.控件绑定listItems正确,我已将其设置为按下返回键直接在当前编辑的字段下创建一个新字段,并将焦点更改为新字段.因此,基本上,要添加新项目,用户按下Return.

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

// 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
Run Code Online (Sandbox Code Playgroud)

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

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

cocoa core-data undo objective-c

8
推荐指数
1
解决办法
2108
查看次数

在安装之前确定网络共享是否存在

我正在开发一种工具,根据用户连接的无线网络自动挂载网络卷.安装音量很容易:

NSURL *volumeURL = /* The URL to the network volume */

// Attempt to mount the volume
FSVolumeRefNum volumeRefNum;
OSStatus error = FSMountServerVolumeSync((CFURLRef)volumeURL, NULL, NULL, NULL, &volumeRefNum, 0L);
Run Code Online (Sandbox Code Playgroud)

但是,如果没有网络共享volumeURL(例如,如果有人关闭或删除了网络硬盘驱动器),Finder会弹出一条错误消息来解释这一事实.我的目标是不发生这种情况 - 我想尝试安装卷,但如果安装失败则无声地失败.

有没有人有关于如何做到这一点的任何提示?理想情况下,我想在尝试安装之前找到一种检查共享是否存在的方法(以避免不必要的工作).如果那是不可能的,那么告诉Finder不显示其错误消息的某种方式也会起作用.

cocoa objective-c

5
推荐指数
1
解决办法
2684
查看次数

标签 统计

cocoa ×2

objective-c ×2

core-data ×1

undo ×1