我在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]];
}发布于 2015-12-01 10:29:19
我承认也许有更好的解决方案--
我不熟悉NSTreeController是如何工作的,但我查看了类引用,注意到它有一个content属性,类似于NSArrayController (我熟悉从其中抓取特定对象)。
我相信,如果content属性实际上是某种树数据结构的类型,那么我在这里的回答可能不会起作用。类引用说明了content的这一点
此属性的值可以是对象数组,也可以是单个根对象。默认值为nil。使用键值观察可以观察到此属性。
这就是我历来对预期结果所做的工作:
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比较。
如果你可以(如果不是太麻烦的话),在这里留下评论,让我知道什么对你有效,实际上我很好奇:)
https://stackoverflow.com/questions/33993687
复制相似问题