0

我在核心数据中添加一个实例。实体由 表示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 的变化,一些较早的答案(例如,在将 enitiy 添加到核心数据时更新 NSTableView)似乎有点过时了。

谢谢!!

4

1 回答 1

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"]);
    }
}

您也应该在更改选择之前提交任何编辑(并且只有在提交编辑或没有任何编辑时才更改选择)。

于 2013-05-14T20:58:41.527 回答