【问题标题】:iOS - ManagedObjectContext is nil in swift CoreDataiOS - Swift CoreData 中的 ManagedObjectContext 为零
【发布时间】:2018-09-13 08:04:45
【问题描述】:

当我试图将一个简单的字符串保存到 CoreData 中时,我遇到了这个问题。

'+entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name 'CurrentUser''

CoreData 设置得很好。我使用以下代码继续。

func saveName(name: String) {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let context: NSManagedObjectContext = appDelegate.persistentContainer.viewContext

        if context ==  nil {
            print("s")
        } else {
            print("d")
        }
        let entity = NSEntityDescription.insertNewObject(forEntityName: "CurrentUser", into: context)
        entity.setValue(name, forKey: "name")

        do {
            try context.save()
            print("saved")

        } catch {
            print("error")
        }    
    }

调用:

saveName("Edwin")

这是我项目中的代码,直到昨天它都运行良好。我想知道刚刚发生了什么。突然之间,它开始显示我上面提到的错误。

我试图找出问题所在:

  1. 如果我在模拟器上运行我的项目,数据将被保存(工作正常)。
  2. 在另一个项目中使用相同的代码在模拟器和设备中都可以正常工作。
  3. 尝试删除之前的构建应用程序并再次运行它。 (结果相同)

我发现的东西:

  1. 当我在设备上运行代码时,ManagedObject 上下文为 nil,但在模拟器上运行时它不是 nil(因此它在模拟器上运行良好)。
  2. 仅当我从我的项目中运行代码时,ManagedObject Context 为零(如果我在另一个项目中运行代码,则在模拟器和设备中都可以正常工作)

帮我解决这个奇怪的问题。

我使用的是 Xcode 9.4.1 斯威夫特:4.1

提前致谢。

【问题讨论】:

  • 嗨,首先使用名称 name 属性不是一个好主意 :) 我认为可能是一些空间词。另外,当您调用 saveName 时???如果你调用得太早,可能上下文没有被初始化。
  • @m1sh0 属性name 非常好。 NSManagedObject 类正在封装数据。没有理由改变它。
  • 检查您的 CoreData 堆栈。如果设置正确,则上下文不得为 nil
  • @vadian - 一切正常。另一个项目中的相同程序运行良好。
  • @Tester 绝对没关系。我在很多项目中都使用name

标签: ios swift core-data nsmanagedobjectcontext


【解决方案1】:

这是 CoreData 中最常见的问题。就我而言,我只是重新创建了数据模型并且它工作正常。感谢评论区的讨论。

【讨论】:

    【解决方案2】:

    在我的情况下,核心数据模型名称与项目名称不匹配,因为我后来在我的项目中添加了它。试试看

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      • 1970-01-01
      相关资源
      最近更新 更多