我一直在为一个问题而奋斗数天和日子,认为这是我的核心数据保存的一个问题,但我现在弄清楚它与获取更多的关系比什么都重要。
我有一些动态创建的NSPopUpButtons,特别是第二个依赖于第一个选择填充其数据的NSPopUpButtons。
我已经意识到,当我调用我的方法来获取第二个弹出窗口的当前选择标题的值时,它总是出现空值。
方法:
- (IBAction)SelectionChanged:(id)sender {
NSString *newItem = [[namePopUp selectedItem] title];
NSPredicate *newPredicate = [NSPredicate predicateWithFormat:@"item == %@", newItem];
[itemSerialController setFilterPredicate:newPredicate];
[serialPopUp selectItemAtIndex:0];
NSLog(@"first number selected is %@", [[serialPopUp selectedItem] title]);
}
始终打印:
first number selected is (null)
这意味着在菜单项实际填充NSPopUpButton之前调用selectItemAtIndex
方法。
我可以在哪里放置此方法,或者我可以添加什么方法,以确保弹出窗口已完全加载,然后再检查它的第一个值?
我已经尝试过[arrayController prepareContent]
和[arrayController rearrangeContent]`
任何想法?
PS:这个方法是在工作表中调用的。现在,我在激活工作表的方法的最后调用它。
这就是我填充第一个弹出窗口内容的方式,以及为第二个弹出窗口设置过滤器谓词。
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Equipment"];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Equipment" inManagedObjectContext:[[NSApp delegate] managedObjectContext]];
fetchRequest.propertiesToFetch = [NSArray arrayWithObject:[[entity propertiesByName] objectForKey:@" item"]];
fetchRequest.entity = entity;
fetchRequest.resultType = NSDictionaryResultType;
[fetchRequest setReturnsDistinctResults:YES];
itemDictionaries = [[[NSApp delegate] managedObjectContext] executeFetchRequest:fetchRequest error:nil];
NSLog(@"item: %@", itemDictionaries);
[nameController setContent:itemDictionaries];
self.itemSelection = [itemDictionaries firstObject];
self.predicate = [NSPredicate predicateWithFormat:@"item == %@", [[nameController selection] valueForKeyPath:@"item"]];
[itemSerialController setFilterPredicate:self.predicate];