【问题标题】:NSTreeController - Retrieving selected nodeNSTreeController - 检索选定的节点
【发布时间】:2015-11-30 07:46:47
【问题描述】:

我在 bookController (NSCreeController) 中添加了 Book 对象。现在我想在选择行时获取存储的 Book 对象。

- (IBAction)addClicked:(id)sender {
    NSTimeInterval timeStamp = [[NSDate date] timeIntervalSince1970];
    // NSTimeInterval is defined as double

    NSUInteger indexArr[] = {0,0};
    Book *obj = [[Book alloc] init];
    NSString *dateString = [NSDateFormatter localizedStringFromDate:[NSDate date]                                                          dateStyle:NSDateFormatterNoStyle                                                          timeStyle:NSDateFormatterLongStyle];
    obj.title = [NSString stringWithFormat:@"New %@",dateString];
    obj.filename = [NSString stringWithFormat:@"%d",arc4random()%100000];
    [self.booksController insertObject:obj atArrangedObjectIndexPath:[NSIndexPath indexPathWithIndexes:indexArr length:2]];
}

【问题讨论】:

  • 你尝试了什么来获取选中的 Book 对象?

标签: cocoa nstreecontroller


【解决方案1】:

我承认可能会有更好的解决方案——

我不熟悉NSTreeController 的工作原理,但我查看了类引用并注意到它有一个content 属性,类似于NSArrayController(我熟悉从中获取特定对象)。 我相信如果content 属性实际上是某种树数据结构的类型,那么我在这里的回答可能行不通。类参考中提到了content

这个属性的值可以是一个对象数组,也可以是一个 单个根对象。默认值为无。该物业是 可使用键值观察来观察。

所以这就是我过去对预期结果所做的事情:

NSString *predicateString = [NSString stringWithFormat:NEVER_TRANSLATE(@"(filename == %@) AND (title == %@)"), @"FILENAME_ARGUMENT_HERE", @"TITLE_ARGUMENT_HERE"];
NSArray *matchingObjects = [[self content] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:predicateString]];

然后只需调用-objectAtIndex: 即可获取您的对象。请注意,如果对象不存在,NSArray 将为空,如果有重复对象,则数组中会有多个对象。

我还搜索了您问题的答案,并找到了这个 SO 线程: Given model object, how to find index path in NSTreeController?

如果我的解决方案不起作用,它看起来很有希望,作者只需遍历树并进行 isEqual 比较。

如果可以(如果不是太麻烦的话),请在此处发表评论,让我知道什么对你有用,我真的很好奇 :)

【讨论】:

  • 我可以使用 selectedNodes 方法解决,该方法在 outlineDidSelect 方法中返回一个 NSTreeNode 数组。
  • 所以你从 selectedNodes 中得到了一个数组,并对其应用了NSPredicate
  • 不,我试图获取它的 NSArray,然后创建 NSTreeNode 对象。
  • 主要是改变方法,你应该使用OutlineDidSelect方法
  • 哦,好吧,我明白你在说什么。酷:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多