我希望能够更改具有startDate和endDate的(日历)事件.还有一段时间.
最后一个动作将触发第一个动作,该动作将触发第三个动作,这将触发第一个动作无限制(或者当堆栈填满时).
像下面这样的行来更改值,导致这个循环:
[self setValue:[NSNumber numberWithLong:(interval%60)] forKeyPath:@"durationMinutes"];
[self setValue:ed forKeyPath:@"endDate"];
Run Code Online (Sandbox Code Playgroud)
简单地停止观察并在更改后重新启动是不具吸引力的,因为GUI中的值不会更新.那么问题是:我如何安全(和优雅地)更新两个相互依赖的属性之一?
一个NSPredicateEditor可在复合模式进行设置,使用IB或代码
[predicateEditor setNestingMode:NSRuleEditorNestingModeCompound];
Run Code Online (Sandbox Code Playgroud)
然后,用户可以按住'option'键添加另一条复合线,以生成复杂的过滤器
((A和B)或C)
有些用户可能会在阅读应用文档后大约一分钟内知道如何在搜索网络后的五分钟内完成此操作,或者他们可能永远都不会学习并放弃应用程序.
我想提出一些建议,以建立一个用户友好的方式来使用多个复合线NSPredicateEditor.
我可以访问应用程序范围内的委托实例使用[NSApp delegate]添加后NSObject的mainmenu.xib,对象的名字为我的appDelegate的名称和mainmenu.xib设置委托给该对象.
现在,我想做的是访问对象的Document,即NSDocument对象"所属" 的活动对象.我想这将是一个文档范围的委托实例.有时[self document]工作,但并非总是如此.有通用的方法吗?
我有NSSplitView四个子视图.每个子视图都有一个标题,其中包含一些文本和一个开/关复选框,下面是一个NSTableView.用户可以使用复选框切换表的可见性.
如果在程序启动时可以看到该表,并且用户取消选中该复选框,则该表将消失.因此子视图变得更小.
我如何做出NSSplitView反应(通过调整分隔线)?
最近,每当我启动我的应用程序时,保存的文档都会导致崩溃。有没有一种方法可以防止基于文档的应用程序打开任何文档,包括新的空白文档或最新的活动文档?我不希望通过使用OSX功能(不在我的应用程序范围内)而是在程序中进行此操作。
我认为应该通过NSDocumentController某种方式完成此操作,但是我无法弄清楚,也没有运气在其他地方找到答案。
因此,如何告诉OSX应用程序(通过NSDocumentController)在启动时不要打开任何文档?
我正在尝试NSPredicateEditorRowTemplate从实体Foo生成一个左侧有许多属性名称的属性,其中包括属性bar。当用户选择“ bar ”时,右侧应成为包含“ bar ”所有值的弹出窗口。
我怎样才能最好地填充右侧弹出窗口?bar 的所有唯一值都存储在一个 中NSMutableArray,因此也许我可以在数组更改时使用 KVO 更改行模板。
有没有办法可以使用代码轻松更改NSPredicateEditor连续右侧弹出窗口中的值?我可以在 IB 中输入一些静态值,但在这种情况下不会这样做。
编辑
阅读了大量相关问答,包括Xcode 4 中的 NSPredicateEditor以及@Dave DeLong 对它的出色回答,我认为很多工作可以这样完成:
NSArray *leftexp = @[[NSExpression expressionForKeyPath:@"name"],[NSExpression expressionForKeyPath:@"married"]];
NSArray *rightexp = @[[NSExpression expressionWithFormat:@"One"],[NSExpression expressionWithFormat:@"Two"]];
NSPredicateEditorRowTemplate *template = [[NSPredicateEditorRowTemplate alloc] initWithLeftExpressions:leftexp rightExpressions:rightexp modifier:NSDirectPredicateModifier operators:@[@(NSEqualToPredicateOperatorType)] options:0];
NSPredicateEditorRowTemplate *compound = [[NSPredicateEditorRowTemplate alloc] initWithCompoundTypes:@[@(NSOrPredicateType)]];
[self.predicateEditor setRowTemplates:@[template,compound]];
NSEntityDescription *description = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:self.managedObjectContext];
self.predicate = [NSPredicate predicateWithFormat:@"name == ''"];
Run Code Online (Sandbox Code Playgroud)
我已经看到了一些办法,使基本NSPredicateEditor出现(至少与复合线),但在我看来,必须有一种优雅的方式来做到这一点,它的方式意味着要做。但是找不到,有人可以帮我解决这个问题吗?
cocoa ×6
macos ×2
nsdocument ×2
nspredicate ×2
core-data ×1
nsexpression ×1
nssplitview ×1
nsview ×1