【发布时间】:2013-04-11 07:43:15
【问题描述】:
我有一个 NSTableView,其 NSTableColumn 的值绑定到一个 NSArrayController。 arrayController 控制我的核心数据托管对象上下文中的一组实体。
效果很好,当新实体通过 UI Actions 插入到 arrayController 中时,tableView 会选择新项目。
但是我会以编程方式在 moc 中创建新实体,然后在 arrayController 中选择新对象。
我尝试了以下方法:
Image *newImage = [Image newImage]; // convenience method to insert new entity into mod.
newImage.title = [[pathToImage lastPathComponent] stringByDeletingPathExtension];
newImage.filename = [pathToImage lastPathComponent];
[self.primaryWindowController showImage:newImage];
showImage: 方法是这样的:
- (void)showImage:(Image *)image
{
[self.imagesArrayController fetch:self];
[self.imagesArrayController setSelectedObjects:@[image]];
}
但是,arrayController 不会改变它的选择。
我做错了吗?我假设我在 moc 中创建的 newImage 对象与 arrayController 控制的对象相同。如果是这样,为什么 arrayController 不改变它的选择?
嗯 - 测试这个假设,我现在已经在运行时检查了 arrayController 的内容。新图像不存在 - 我认为这意味着我已经通过手动插入 moc 来“躲在后面”绑定......
我的newImage方便方法是这样的:
+ (Image *)newImage
{
Image *newImage = [NSEntityDescription insertNewObjectForEntityForName:@"Image" inManagedObjectContext:[[CoreDataController sharedController] managedObjectContext]];
return newImage;
}
这不符合 KVO 吗?
嗯 - 编辑 2...
我假设它符合 KVO,因为新图像出现在 UI 中。我现在认为将实体插入 moc 和通知 arrayController 之间存在延迟。
我从这个问题New Core Data object doesn't show up in NSArrayController arrangedObjects 中看到(帮助显示在这个问题的右侧),要求 arrayController 获取:应该有助于更新 arrayController,但实际获取:直到下一次才会发生运行循环运行。
我应该使用计时器延迟选择新对象吗?这似乎有点不雅......
【问题讨论】:
标签: cocoa core-data cocoa-bindings key-value-observing