我对可可的绑定世界相当新,我遇到了一些麻烦(可能/可能是由于误解).
我有一个包含一个名为plugins的NSMutableArray的单例,它包含类Plugin的对象.它有一个名为loadPlugins的方法,它将对象添加到插件数组中.这可以在任何时候调用.它已作为Interface Builder中的实例添加.
IB中还有一个NSObjectController,其内容出口连接到单例.还有一个NSArrayController,其contentArray绑定到NSObjectController(控制器键是'选择',模型键路径是'插件',对象类名称是'插件').
最后我有一个包含2列的表视图,其值使用Plugin类中的属性键绑定到NSArrayController的arrangeObjects.
到目前为止如此标准(至少从教程中可以看出).我的麻烦是,当在单例中调用loadPlugins方法,并且对象被添加到plugins数组时,表不会更新以显示对象(除非在加载nib之前调用loadPlugins).在tableView上调用的-reloadData不执行任何操作.
有没有办法告诉NSArrayController引用的数组是否已更新?我知道NSArrayController有-add:方法,可以在loadPlugins中使用,但这是不可取的,因为我想让单例与显示方面完全分开.
这似乎与: Refresh Cocoa-Binding - NSArrayController - ComboBox有关
这条线:"编辑控制器后面的阵列"似乎也可能找出问题所在,但我希望有可能让单身人士不知道控制器.
提前致谢.
\编辑...
根据TechZen的建议,这是绑定:
TableColumn --('arrangedObjects', 'pluginName', Value)--> NSArrayController
NSArrayController --('selection', 'plugins', ContentArray)--> NSObjectController
NSObjectController --(content)--> PluginsManager
Run Code Online (Sandbox Code Playgroud) 我试图在互联网上找到我的问题的答案,但我不能.我在Core数据中有一个简单的实体,它具有Value属性(即整数)和Date属性.我想在我的.m文件中定义两个方法.
第一种方法是ADD方法.它有两个参数:整数值(由用户在UI中输入)和日期(默认为当前日期).然后根据参数将记录插入实体.
第二种方法就像增量方法.它使用Date作为键来查找记录,然后递增该记录的整数值.
我不知道如何编写这些方法.(假设我们在xib文件中有一个表控制器)
我有一个 NSArrayController,它绑定到我的托管对象上下文中的一个类。在运行时,NSArrayController 可以应用许多不同的过滤谓词。在某些时间间隔,我想迭代 NSArrayController 的内容,而不管应用于它的过滤谓词如何。
为此,我将 filterPredicate 设置为 nil,然后在迭代数组后恢复它。这似乎有效,但我想知道这是否是最佳实践?我应该手动轮询我的托管对象上下文吗?
NSPredicate *predicate = nil;
predicate = [myArrayController filterPredicate];
[myArrayController setFilterPredicate:nil];
for(MyManagedObject *object in [myArrayController arrangedObjects]) {
// ...
}
[myArrayController setFilterPredicate:predicate];
Run Code Online (Sandbox Code Playgroud) 我正在初始化一个简单的接口,NSTableView绑定到一个数组控制器(管理一个字典数组).我想在后台加载数组的内容(这是一个非常耗时的过程),每100或1000个元素更新表视图.我们的想法是界面可用且响应迅速.我无法弄清楚如何在之后触发更新/刷新.桌子仍然是空的.任何人都可以提供指针吗?
我目前的做法是:
// In init for my app controller. This seems to work well, but I've tried other methods here.
[self performSelectorInBackground:@selector(loadTable) withObject:nil];
- (void)loadTable {
tracks = [[NSMutableArray alloc] initWithCapacity:[masters count]];
// ... create each object one-by-one. Add it to tracks.
for (... in ...) {
[tracks addObject:newObject];
}
// Now I don't know what to do next. The table remains empty.
// Things I've tried (though possibly not in all combinations with the
// method above):
// 1. …Run Code Online (Sandbox Code Playgroud) 我有一个由大控制器控制的应用程序.在我的主要窗口中,我有一个按钮,按下时我想打开一个新窗口,数据将被存储到一个窗口中NSTableView.
阅读一些资料后,我发现一些非常有趣和有用之间NSTableView和NSArrayController.
所以,我想知道,如果它可以显示在数据NSTableView通过控制NSArrayController从NSMutableArray我的控制器编辑.
我正在使用Swift为NSCollectionView工作.当我使用NSArrayController对象作为NSCollectionView的内容时.我得到了以下错误:
提出了未被捕获的例外情况
[valueForUndefinedKey:]:此类不是键值plugName的键值编码兼容.
我不知道为什么.我创建了一个名为NHPlug和NSArrayController的模型,如下所示,这是我的代码.:
/* Class NHAppController */
import Cocoa
class NHAppController: NSObject {
@IBOutlet weak var arrayController: NSArrayController?
var plugs: NSMutableArray?
override func awakeFromNib() {
var t = NHPlug(plugID: 1, plugName: "test")
plugs = NSMutableArray()
arrayController?.addObject(t)
}
}
/* Class NSPlug */
import Cocoa
class NHPlug: NSObject {
var plugID : Int
var plugName : String
init(plugID: Int, plugName: String) {
self.plugID = plugID
self.plugName = plugName;
}
}
Run Code Online (Sandbox Code Playgroud)
如果有人可以帮助,非常感谢!
这里如果崩溃堆栈:
-01-21 19:47:07.347 Notifyhub [58369:598950]一个未被捕获的异常被提出2015-01-21 19:47:07.347 Notifyhub [58369:598950] [valueForUndefinedKey:]:这个类不符合键值编码对于密钥plugName.2015-01-21 …
cocoa ×4
objective-c ×3
core-data ×2
nstableview ×2
controller ×1
entity ×1
insert ×1
macos ×1
nsstoryboard ×1
record ×1
swift ×1