2011-04-17 51 views
4

我正在寻找一种内置(或易于实现)的方式来获取核心数据撤销/重做操作名称,如“撤消编辑名字”,而不是简单地“撤消”或“重做”,因为它们默认是这样。取消核心数据更改的操作名称

我有一个核心数据应用程序,并使用其NSUndoManager作为我的窗口的撤消管理器。它的效果很好,但是当用户对字段进行更改(从NSTableView内联)时,撤消菜单项的标题不会反映哪个字段已更改。

初始搜索引导我回到2007年1月发布在Apple Mailing Lists上的相同问题。发布的唯一答案是“在Core Data Programming Guide中搜索'Model.strings'”。我没有为我的模型的字符串文件,所以我创建了一个(本地化在我的en.lproj目录和UTF-16编码),但这没有什么区别。

我遵循Apple的tutorial(稍微改编,因为我的应用程序不是基于文档)和Core Data documentation的指示,但我的菜单标题仍然显示“撤消”和“重做”。

回答

1

在您的NSManagedObject子类中添加

-(void)setValue:(id)value forKey:(NSString *)key 
{ 
    NSUndoManager * aUM = [[self managedObjectContext] undoManager]; 
    [super setValue:value forKey:key]; 
    if ([aUM isUndoRegistrationEnabled]) 
     [aUM setActionName:NSLocalizedString(key,nil)]; 
} 
+0

的'NSLocalizedString'打电话给你的样品中虽然不会工作,因为这将不抬头对Model.strings文件。如何在运行时查找字段的本地化名称? – Dov 2011-04-25 20:57:32

+0

我发布了上面作为一个单独的问题:http://stackoverflow.com/q/5790296/105717 – Dov 2011-04-26 12:28:38

+2

我也相应地修改了你的'if'语句:'if([aUM isUndoRegistrationEnabled] &&![aUM isUndoing] &&![ aUM isRedoing])'以避免每次执行撤销或重做时都有重复的条目。 – Dov 2011-04-26 15:34:35