以编程方式创建实体并将其添加到数组控制器

Posted

技术标签:

【中文标题】以编程方式创建实体并将其添加到数组控制器【英文标题】:Create entity programmatically and add it to an array controller 【发布时间】:2012-01-20 02:39:30 【问题描述】:

我有一个绑定到 nstableview 的数组控制器。我还有一些用户填充的 nstextfields,然后按下“添加”按钮。我想获取这些字段,first_name 和 last_name,并使用它们来填充实体。我将调用实体 PersonEntity。

因此,在添加按钮的委托中,我获取 2 个文本字段的字符串值,填充一个实体,然后将其添加到数组控制器。我是可可/objective-c 的新手。这似乎是一件简单的事情,但似乎我无法像我期望的那样创建一个实体

PersonEntity* person
[person setFirst_name:firstName];
[person setLast_name:lastName];
[customerArray addObject:person];

它崩溃说我不能在 [customerArray addObject:customer] 行添加 nil。该行是我尝试将实体添加到绑定到 tableview 的数组控制器中。这样做的正确方法是什么?

【问题讨论】:

你能发布更多的上下文代码吗?客户是什么类型的对象?有人分配过吗? sbooth,我修复了不应该有客户的代码。人员未分配,如果我对人员执行分配/初始化,它会崩溃。 如果人员没有被分配,那很可能是问题所在。如果PersonEntity *person = [[PersonEntity alloc] init] 崩溃,那么问题的另一个根源。 PersonEntity 的超类是什么? NSManagedObject,它是从我在 gui 编辑器中创建的核心数据实体创建的。我在 Xcode 中做了一些事情来生成类。我相信我在点击实体后去了 Editor->Create NSManagedObject 子类。我不能 100% 确定这是我使用的菜单选项,但我没有看到其他我可能使用过的东西 【参考方案1】:

我不确定 PersonEntity 是否是核心数据实体,但由于您的问题也被标记为核心数据,我会假设它是。

如果您的 ArrayController(绑定到 NSTableView 的那个)绑定到 CoreData 源,则不要直接向其中添加对象。相反,您将其添加到 managedObjectContext 中,它将反映在您的 NSTableView 中。

代码应如下所示:

 PersonEntity *person = [NSEntityDescription insertNewObjectForEntityForName:@"PersonEntity"
                                        inManagedObjectContext: managedObjectContext];

[person setFirst_name:firstName];
[person setLast_name:lastName];

/* Save Event */
NSError * error = nil;
[__managedObjectContext save: &error];

希望这会有所帮助! 鬃毛

【讨论】:

以上是关于以编程方式创建实体并将其添加到数组控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何向在 tabcontroller 中以编程方式创建的导航控制器中的 barbuttonitem 添加操作

如何在以编程方式创建实体时设置 NSManagedObjectModel 的配置。

以编程方式创建并添加到 uiimageview 时,UIButton 无响应

NSArrayController,以编程方式创建 CoreData 实体,以及 KVO

Swift - 以编程方式向堆栈视图添加标签

以编程方式添加的约束反向工作