我在核心数据中添加了一个实例。该实体由NSArrayController
表示。我想通过控制器访问新添加的实例。
添加了“技能”实例,然后我尝试通过selectAddedObject
访问它,如下所示:
-(void)addSkill
{
[self selectAddedObject:[NSEntityDescription insertNewObjectForEntityForName:@"Skill"
inManagedObjectContext:self.managedObjectContext]];
}
- (void)selectAddedObject:(NSManagedObject *)addedMO
{
[self.sectionArrayController setSelectedObjects:[NSArray arrayWithObject:addedMO]];
NSLog(@"Selected: %@", [self.sectionArrayController valueForKey:@"selectedObjects"]);
}
如果我添加
,这似乎才有用[self.managedObjectContext processPendingChanges];
作为selectAddedObject:
的第一行。但是一旦我这样做,该文档似乎忘记它仍然需要保存,我可以退出应用程序而不添加自动保存。不想强迫用户使用!
关于以某种方式立即更新阵列控制器的方法的任何想法?或者也许以另一种方式添加对象?由于OSX的变化,一些早期的答案(例如Updating NSTableView when enitiy is added to core data)似乎有点过时了。
谢谢!
答案 0 :(得分:1)
使用阵列控制器添加对象。在配置期间的某个时刻,确保设置实体([self.sectionArrayController setEntityName:@"Skill"]
),然后完成所有工作以创建并选择:
- (void)createAndSelectNewObject
{
Skill *addedMO = [self.sectionArrayController newObject];
if([self.sectionArrayController commitEditing]) {
[self.sectionArrayController setSelectedObjects:[NSArray arrayWithObject:addedMO]];
NSLog(@"Selected: %@", [self.sectionArrayController valueForKey:@"selectedObjects"]);
}
}
您应该在更改选择之前提交任何编辑(并且只有在提交编辑或没有编辑时才更改选择。)