gpt4 book ai didi

cocoa - NSArrayController,以编程方式创建 CoreData 实体,以及 KVO

转载 作者:行者123 更新时间:2023-12-03 16:37:17 25 4
gpt4 key购买 nike

我有一个 NSTableView,其 NSTableColumn 的值绑定(bind)到 NSArrayController。 arrayController 控制我的核心数据管理对象上下文中的一组实体。

它运行良好,当通过 UI 操作将新实体插入 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 中“走到了绑定(bind)的后面”...

我的 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 (SO在这个问题的右侧很有帮助地显示)要求 arrayController 获取: 应该有助于更新 arrayController,但实际的 fetch: 直到下次运行循环运行时才会发生。

我应该使用计时器延迟选择新对象吗?这似乎有点不雅...

最佳答案

对 - 解决了它,感谢这个问题:New Core Data object doesn't show up in NSArrayController arrangedObjects

插入新对象后,我必须直接在 moc 上调用 processPendingChanges: 。

所以,我现在的新创建便捷方法是:

+ (Image *)newImage
{
Image *newImage = [NSEntityDescription insertNewObjectForEntityForName:@"Image" inManagedObjectContext:[[CoreDataController sharedController] managedObjectContext]];
[[[CoreDataController sharedController] managedObjectContext] processPendingChanges];
return newImage;
}

关于cocoa - NSArrayController,以编程方式创建 CoreData 实体,以及 KVO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15943240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com