- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个核心数据模型,它由特定实体的简单树组成,该实体具有两个关系:父
和子
。我有一个 NSTreeController
管理模型,并有一个 NSOutlineView
绑定(bind)到 NSTreeController
。
我的问题是我需要一个根对象,但这不应该显示在大纲 View 中,只有它的子对象应该显示在大纲 View 的顶层。如果我将 Interface Builder 中的 NSTreeController
的获取谓词设置为 parent == nil
,则一切正常,除了根项在大纲 View 中作为顶级项可见之外.
我的实体有一个属性 isRootItem
,仅适用于根项目。
我的模型如下所示:
Node 1
|
+-Node 2
| |
| +-Node 5
|
Node 3
|
Node 4
大纲 View 应如下所示:
(来源:menumachine.com)
我需要在大纲 View 的顶层显示节点 2、3 和 4(节点 1 不应该可见),但它们的父节点仍然是“节点 1”。节点 1 的 isRootItem
值为 YES
,所有其他节点的 NO
值为 NO
。
如果我将树 Controller 的获取谓词设置为 parent.isRootItem == 1
,这会正确显示树,但是一旦我将新项目添加到顶层,它就会失败,因为树 Controller 不会将“不可见”根项指定为新项的父项。
有没有办法让 NSTreeController
/NSOutlineView
组合在这种情况下工作?
最佳答案
我最终所做的是子类化 NSTreeController 并覆盖 -insertObject:atArrangedObjectIndexPath:
,如果要插入的对象被插入到顶层对象,则直接将父对象设置为我的根对象树。这似乎工作可靠。
显然需要更多的工作来处理移动项目和插入多个项目,但这似乎是最好的方法。
- (void)insertObject:(id)object atArrangedObjectIndexPath:(NSIndexPath *)indexPath
{
NodeObject* item = (NodeObject*)object;
//only add the parent if this item is at the top level of the tree in the outline view
if([indexPath length] == 1)
{
//fetch the root item
NSEntityDescription* entity = [NSEntityDescription entityForName:@"NodeObject" inManagedObjectContext:[self managedObjectContext]];
NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init]; //I'm using GC so this is not a leak
[fetchRequest setEntity:entity];
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"isRootItem == 1"];
[fetchRequest setPredicate:predicate];
NSError* error;
NSArray* managedObjects = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];
if(!managedObjects)
{
[NSException raise:@"MyException" format:@"Error occurred during fetch: %@",error];
}
NodeObject* rootItem = nil;
if([managedObjects count])
{
rootItem = [managedObjects objectAtIndex:0];
}
//set the item's parent to be the root item
item.parent = rootItem;
}
[super insertObject:object atArrangedObjectIndexPath:indexPath];
//this method just sorts the child objects in the tree so they maintain their order
[self updateSortOrderOfModelObjects];
}
关于cocoa - 如何将 NSTreeController、NSOutlineView 和 Core Data 与 "invisible"根项一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1678637/
我有一个 NSTreeController 来管理一个实体(核心数据模型)和一个 NSOutlineView 来显示该树。 我希望树显示一些与底层核心数据模型中的实体不对应的特殊节点。我该怎么做呢?我
当 NSTreeController -(void)addChild:(id)sender 被调用时,有没有办法获取创建的 NSManagedEntity ? 文档提到此方法的结果被推迟到下一个循环运
背景 我在我的 Cocoa 应用程序中构建了一个源列表(类似于 iTunes 等)。 我有一个带有 Value 的 NSOutlineView绑定(bind)到arrangedObjects.name
我有一个(我认为)非常简单的情况,其中 NSTreeController 绑定(bind)到根对象数组,每个根对象可能有一些子对象。我正在使用 NSBrowser 来展示它们。 它们显示良好并且层次结
我有一个 NSTreeController,它绑定(bind)到一个类。 NSOutlineView dirTree 绑定(bind)到 NSTreeController 特别是大纲 View 内容绑
我在程序中将 NSTreecontroller 与 NSOutlineView 结合使用,并且我的程序不断抛出:malloc: *** error for object 0x1d70d0: doubl
我正在开发桌面可可应用程序。在应用程序中,我有一个基于视图的NSOutlineView绑定到NSTreeController: NSTreeController处于实体模式,由Core Data驱
在 Marcus Zarra 的《核心数据》一书中的第 40 页中,他建议,由于 NSTreeController 需要相同的 key 来访问层次结构中的所有对象(例如子对象),并且这可能意味着意义不
我有一个 NSTreeController (向 NSOutlineView 提供内容)。我希望顶级对象属于一个类,而所有其他对象(因此,任何级别的子对象)属于另一个类。解决这个问题的最佳方法是什么?
正如你们中许多人可能知道的那样,绑定(bind)到大纲 View 的 NSTreeController 可以在呈现核心数据实体时显示重复项。 临时解决方案是在谓词中添加“parent == nil”,
我是 Swift 新手,正在尝试学习如何使用 NSOutlineView 实现 NSTreeController。我一直在遵循几个显示此类示例的指南,但我不断收到错误。我一步一步地遵循和/或尝试运行他
我有一个非常基本的应用程序:一个带有绑定(bind)到 NSTreeController 的 NSOutlineView 的窗口。大纲 View 显示一个简单的模型对象 (TCCard)。我添加了两个
在我的项目中,NSTreeController 绑定(bind)到 NSOutlineView( cocoa 绑定(bind))。由于某种原因我无法使用NSPredicate从Core Data中过滤
背景 带有 GC 的 Snow Leopard 10.6.4 上的核心数据应用 我有一个由 NSTreeController 使用绑定(bind)支持的 NSOutlineView 我正在后台 NSO
我正在尝试将 NSTreeController 的“arrangedObjects”绑定(bind)到自定义 View 的“managedContent”(例如,以便它可以显示自定义轮廓)。在 set
好的各位,这是我的问题。 我将使用 CoreData + Source List + NSTreeController 创建类似于 Finder(或 iTunes,如果您愿意)的源列表的内容。 我的问
有人知道一个好的解决方法或黑客从 NSTreeController add: 或 addChild: 方法获取指向新创建的节点的指针吗? 最佳答案 一种方法是让它选择插入的对象,然后调用 select
如何使用搜索框来过滤 NSOutlineView/NSTreeController?我知道这与绑定(bind)和谓词有关。但没有具体说怎么做。有人可以指导我完成过滤 NSOutlineView/NST
我有一个简单的 NSOutlineView 绑定(bind)到 NSTreeController,它提供对我的分层数据模型的访问。我想将其设为主/详细 View ,并在某些绑定(bind) View
给定 NSTreeController 表示的模型对象,如何在树中找到它们的索引路径并随后选择它们?这似乎是一个非常明显的问题,但我似乎找不到任何引用。有什么想法吗? 最佳答案 没有“简单”的方法,您
我是一名优秀的程序员,十分优秀!