首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSTreeController -检索选定节点

NSTreeController -检索选定节点
EN

Stack Overflow用户
提问于 2015-11-30 15:46:47
回答 1查看 195关注 0票数 0

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

代码语言:javascript
复制
- (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]];
}
EN

回答 1

Stack Overflow用户

发布于 2015-12-01 10:29:19

我承认也许有更好的解决方案--

我不熟悉NSTreeController是如何工作的,但我查看了类引用,注意到它有一个content属性,类似于NSArrayController (我熟悉从其中抓取特定对象)。

我相信,如果content属性实际上是某种树数据结构的类型,那么我在这里的回答可能不会起作用。类引用说明了content的这一点

此属性的值可以是对象数组,也可以是单个根对象。默认值为nil。使用键值观察可以观察到此属性。

这就是我历来对预期结果所做的工作:

代码语言:javascript
复制
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将为空;如果有重复的对象,则数组中将有多个对象。

我还搜索了你的问题的答案,并找到了这样的帖子:Given model object, how to find index path in NSTreeController?

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

如果你可以(如果不是太麻烦的话),在这里留下评论,让我知道什么对你有效,实际上我很好奇:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33993687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档