以编程方式添加到核心数据实体(如IB绑定'添加')

时间:2011-02-21 13:54:44

标签: objective-c xcode macos nsarraycontroller nsmanagedobjectcontext

我有一个核心数据模型,其中包含一个名为 clients 的实体,该实体由以下属性组成:

client model entity

如果我点击“添加客户端”按钮并显示以下窗口:

client window

以编程方式同时为每个属性添加新条目的正确方法是什么(以类似于绑定的IB'添加'按钮如何与NSArrayController一起使用的方式)并让它们出现在文本字段中要编辑的“添加客户端”窗口? “添加客户端”窗口中的文本字段绑定到客户端实体的相应属性(仍有一个或两个仍然缺失)。我目前的代码是:

- (IBAction)addNewClient:(id)sender;
{
    [addClientsWindow makeKeyAndOrderFront:self];
    //NSManagedObjectContext *clientsMoc= [clientsController managedObjectContext];
    //[clientsMoc addObject:[clientsMoc newObject]];
    [clientsController addObject:[clientsController newObject]];
}

这适用于此项目中的其他实体,但不适用于客户端,因为我添加了关系类型(它会在控制台中引发KVC错误)。我想这是因为我正在处理NSArrayController而不是NSManagedObjectContext,但注释掉的代码对我不起作用。这个尝试是从previous question开始的,因为问题已经发生了很大变化,我正在努力实施给出的建议。我真的需要一个很好的起点,苹果开发者文档并没有帮助我理解这一点。

提前致谢!

----更新----

我在这个问题上解释得很糟糕吗?我是新来的,但认为可能有尝试回答。谷歌搜索这个由于某种原因很难。我可能通过无关的Google搜索找到了与解决方案类似的内容。幸运的是,它与此相关。

- (IBAction)addNewClient:(id)sender;
{
    [addClientsWindow makeKeyAndOrderFront:self];
    NSManagedObjectContext *clientsMoc= [clientsController managedObjectContext];
    NSManagedObject *clientsEntity = [NSEntityDescription
                                     insertNewObjectForEntityForName:@"Clients" 
                                       inManagedObjectContext:clientsMoc];
    [clientsEntity setValue:@"name" forKey:@"clientName"];
    [clientsEntity setValue:@"company" forKey:@"clientCompany"];
    [clientsEntity setValue:@"address" forKey:@"clientAddress"];
    [clientsEntity setValue:@"11111111" forKey:@"clientLandline"];
    [clientsEntity setValue:@"email@gmail.com" forKey:@"clientEmail"];
}

这为客户实体创建了一个全新的条目 - 我没有意识到我必须为每个属性做一个单独的值。 KVC错误仍在继续,我根本找不到解决方案。 Apple dev文档实际上对此有用here,并且将NSBindingDebugLogLevel 1添加到“启动时要传递的参数”列表中,可以让我详细了解导致问题的原因。这是一个旧的绑定NSTableColumn尚未更新。

1 个答案:

答案 0 :(得分:3)

这可能是我追求的解决方案:

- (IBAction)addNewClient:(id)sender;
{
    [addClientsWindow makeKeyAndOrderFront:self];
    NSManagedObjectContext *clientsMoc= [clientsController managedObjectContext];
    NSManagedObject *clientsEntity = [NSEntityDescription
                                     insertNewObjectForEntityForName:@"Clients" 
                                       inManagedObjectContext:clientsMoc];
    [clientsEntity setValue:@"name" forKey:@"clientName"];
    [clientsEntity setValue:@"company" forKey:@"clientCompany"];
    [clientsEntity setValue:@"address" forKey:@"clientAddress"];
    [clientsEntity setValue:@"11111111" forKey:@"clientLandline"];
    [clientsEntity setValue:@"email@gmail.com" forKey:@"clientEmail"];
}

这为客户实体创建了一个全新的条目 - 我没有意识到我必须为每个属性做一个单独的值。 KVC错误仍在继续,我根本找不到解决方案。 Apple dev文档实际上对此有用here,并且将NSBindingDebugLogLevel 1添加到“启动时要传递的参数”列表中,可以让我详细了解导致问题的原因。这是一个旧的绑定NSTableColumn尚未更新。