在单独的控制器中将对象添加到上下文时出错

Posted

技术标签:

【中文标题】在单独的控制器中将对象添加到上下文时出错【英文标题】:Error when adding object to Context in seperate Controller 【发布时间】:2014-10-09 16:13:15 【问题描述】:

我有一个带有 AppDelegate 和 MainController 的简单应用程序 - 我已将 managedObjectContext 传递给 MainController(我认为成功),但在将对象添加到上下文时收到错误消息。

代码:

 @implementation AppDelegate

 -(void)applicationDidFinishLaunching:(NSNotification *) aNotification
 
  // this line is wrong:  MainController *controller = [[MainController alloc] init];
  controller.managedObjectContext = self.managedObjectContext;
 


  @interface MainController : NSObject

  @property (nonatomic, strong) NSManagedObjectContext *managedObjectContext;


  @implementation MainController

  -(IBAction)addItem:(id)sender 

  NSManagedObject *newObject = [NSEntityDescription
                               insertNewObjectForEntityForName:@"Person"
                               inManagedObjectContext: self.managedObjectContext];

   //The above line gives an error

错误: +entityForName: nil 不是合法的 NSManagedObjectContext 参数搜索实体名称“Person”

如果我更改代码并在 AppDelegate 中执行所有操作,则一切正常。

我不确定发生了什么。

[编辑] 我需要创建一个从 IB 中的 MainController 对象到 AppDelegate 的 IBOutlet - 感谢 Nofel。

【问题讨论】:

你在 MainController 中 @synthesized managedObjectContext 了吗?为什么不在 AppDelegate 中创建 MainController 属性? 是的,首先我没有合成,然后添加它 - 没有变化。 ok ... 也考虑做 controller.managedObjectContext=[self managedObjectContext];而不是 controller.managedObjectContext = self.managedObjectContext; 没有变化 - 同样的错误。 【参考方案1】:

我觉得应该是这样的:

Person *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:_managedObjectContext];
[person setName:someNameTextField]; // if you want to set some properties
[_managedObjectContext save:nil]

这取决于您如何创建核心数据模型以及您在 appDelegate 中使用的内容。 最好的方法是先看一些教程或开发者库。

【讨论】:

感谢您的想法,刚刚尝试并收到相同的错误。当我在 AppDelegate 中拥有所有内容但在 MainController 中没有时,该代码有效。

以上是关于在单独的控制器中将对象添加到上下文时出错的主要内容,如果未能解决你的问题,请参考以下文章

在实体框架中将对象树附加到对象上下文

是否可以在单独的线程中将 QObject 设置为 QML 上下文属性?

使关系有序会导致“对无效对象的悬空引用”。使用上下文限制时出错

在 Swift 3.1 中将自己的对象数组添加到 UserDefaults 时出错

在 Xcode11 Beta 4 中将 String(format: , args) 与 SwiftUI 一起使用时出错

在结构化流中将数据帧传递给 UDF 时出错