【发布时间】: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")
这是我项目中的代码,直到昨天它都运行良好。我想知道刚刚发生了什么。突然之间,它开始显示我上面提到的错误。
我试图找出问题所在:
- 如果我在模拟器上运行我的项目,数据将被保存(工作正常)。
- 在另一个项目中使用相同的代码在模拟器和设备中都可以正常工作。
- 尝试删除之前的构建应用程序并再次运行它。 (结果相同)
我发现的东西:
- 当我在设备上运行代码时,ManagedObject 上下文为 nil,但在模拟器上运行时它不是 nil(因此它在模拟器上运行良好)。
- 仅当我从我的项目中运行代码时,ManagedObject Context 为零(如果我在另一个项目中运行代码,则在模拟器和设备中都可以正常工作)
帮我解决这个奇怪的问题。
我使用的是 Xcode 9.4.1 斯威夫特:4.1
提前致谢。
【问题讨论】:
-
嗨,首先使用名称 name 属性不是一个好主意 :) 我认为可能是一些空间词。另外,当您调用 saveName 时???如果你调用得太早,可能上下文没有被初始化。
-
@m1sh0 属性
name非常好。NSManagedObject类正在封装数据。没有理由改变它。 -
检查您的 CoreData 堆栈。如果设置正确,则上下文不得为
nil -
@vadian - 一切正常。另一个项目中的相同程序运行良好。
-
@Tester 绝对没关系。我在很多项目中都使用
name。
标签: ios swift core-data nsmanagedobjectcontext