我多年来一直是.NET开发人员,但刚开始使用Objective-C / Cocoa。我和Scott Stevens Up and Running一起完成了Hillegass的书。在过去的几周里学到了很多东西(很大程度上归功于这个网站),我一直在编写一个我之前用VS编写过的应用程序。它使用核心数据并跟踪我的大型乐谱库。该应用程序由一个主窗口和一个水平拆分视图组成。顶视图有三个用于标准选择的表格,因此我可以缩小下方视图中显示的内容,例如音乐类型,十年和流派(例如民谣,80年代和摇滚乐)。
我已经设法构建主视图并让选择创建一个谓词,该谓词绑定到下部视图中数组控制器的filer谓词。下部视图是具有自己的笔尖的自定义视图。当顶视图中的选择发生变化时,谓词会重建,但我可以将其应用于下方视图中的表的唯一方法是重新加载视图。除了一件事,这没关系。下部视图还有两个表,其中主 - 细节类型界面在左侧显示艺术家,在右侧显示歌曲。因此,如果我在下方视图中选择了一位艺术家,那么当我在上方视图中更改选择条件时,我希望该选择保持不变。如果我重新加载下方视图,我会在下方视图中丢失艺术家选择。
所以在那篇迷你小说之后就是这个问题。如何从主视图发送消息以更新过滤谓词并刷新歌曲表而不会失去焦点。我知道必须有一种方法,但我不能为我的生活找到它。我有一个自定义类来构建和返回谓词,我可以实例化该类并获取我认为足够的谓词,因为过滤谓词绑定到该类但我想这样做会创建一个新的类实例,绑定没有看到它。
非常感谢任何帮助。
答案 0 :(得分:1)
如果要将一个对象属性绑定到另一个对象(当源对象更改值时自动更新绑定对象),我建议查看Cocoa Bindings
例如,您可以使用
轻松地将一个对象绑定到另一个对象属性-bind:toObject:withKeyPath:options:
E.g。
[self bind:@"myDependendProperty"
toObject:myOtherView
withKeyPath:@"myOtherViewsKeyPath" // this can be for instance @"frame", @"bounds"...
options:myBindingOptionFlags];
如果您不需要自动更新,您可以坚持使用NSNotificationCenter
并使用您自己定义的通知名称在那里发布对象(可以是任意字符串)。