iOS - Swift CoreData 中的 ManagedObjectContext 为零
Posted
技术标签:
【中文标题】iOS - Swift CoreData 中的 ManagedObjectContext 为零【英文标题】:iOS - ManagedObjectContext is nil in swift CoreData 【发布时间】: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
。
【参考方案1】:
这是 CoreData 中最常见的问题。就我而言,我只是重新创建了数据模型并且它工作正常。感谢评论区的讨论。
【讨论】:
【参考方案2】:在我的情况下,核心数据模型名称与项目名称不匹配,因为我后来在我的项目中添加了它。试试看
【讨论】:
以上是关于iOS - Swift CoreData 中的 ManagedObjectContext 为零的主要内容,如果未能解决你的问题,请参考以下文章
Swift/IOS/CoreData:如何在自动生成的 CoreData 类中将 var 定义为枚举类型?
JSON结果的setValue(纬度/经度坐标为Double)到Swift中的CoreData