0

我在 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]];
}
4

1 回答 1

0

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

我不熟悉如何NSTreeController工作,但我查看了类引用并注意到它有一个content类似于 an 的属性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 线程: 给定模型对象,如何在 NSTreeController 中查找索引路径?

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

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

于 2015-12-01T02:29:19.067 回答