无法将值保存到核心数据
Posted
技术标签:
【中文标题】无法将值保存到核心数据【英文标题】:Unable to save values to Core Data 【发布时间】:2018-08-06 05:50:09 【问题描述】:我正在尝试将数据存储到 AppDelegate
本身的核心数据中,然后从 ViewController
获取该数据。由于某种原因,它没有保存在 Core-Data 中。我已经尝试在互联网上搜索这个问题,但没有得到任何具体的解决方案。我已经粘贴了下面的代码 -
AppDelegate.swift
func saveContext ()
let context = persistentContainer.viewContext
print(context)
let entity = NSEntityDescription.entity(forEntityName: "Msg", in: context)
print(entity)
let new = NSManagedObject(entity: entity!, insertInto: context)
print(new)
print(getData.alert_message)
new.setValue(getData.alert_message, forKey: "title")
do
try context.save()
print("save")
print(new.value(forKey: "title"))
catch
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
控制台输出
【问题讨论】:
请提供您正在打印的日志详细信息。 不清楚您是否在保存或获取时遇到问题,标题说明的是一回事,而文字说明的是另一回事。 获取数据是后面的部分,首先我需要检查它是否存储在核心数据中。 @Khushbu 我已经提供了日志截图 代码有什么问题?根据控制台输出,记录被保存。但是你为什么不为NSManagedObject
子类和点表示法使用通用API
【参考方案1】:
您可以通过NSFetchRequest
从实体中获取记录
尝试以下方法,您只需将实体名称作为函数的参数传递。
func getAllRecordFromTableWhere(_ tableName: String) -> [NSManagedObject]?
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: tableName)
do
return try managedContext.fetch(fetchRequest)
catch let error as NSError
print("Could not fetch. \(error), \(error.userInfo)")
return nil
并调用类似
的函数if let arrayOfData = DBHelper.getAllRecordFromTableWhere("Msg")
print(arrayOfData)
【讨论】:
【参考方案2】: Hear I have Set My Own Solution, Hope This help You
let contex = ((UIApplication.shared.delegate) as! AppDelegate).persistentContainer.viewContext
func SaveData()
let entity = NSEntityDescription.insertNewObject(forEntityName: "Employee", into: contex);
entity.setValue(txtname.text, forKey: "empname") // txtname.text is My TexField name
entity.setValue(txtadd.text, forKey: "empadd");
do
try contex.save();
catch
【讨论】:
【参考方案3】:我认为您没有为实体的所有属性赋值,因此请先检查。
尝试类似的东西
new.setValue(msgdata, forKey: "msgdata")
//msgdata 是你要保存在 Coredata 实体上的内容
//试试这样的方法
【讨论】:
检查我在问题中的代码我已经在函数本身中尝试过。 new.setValue(getData.alert_message, forKey: "title") 为所有属性赋值并检查所有属性名称是否应与 coredata 中声明的相同。 github.com/Ashutos39/ContactBookDemo希望对您有所帮助。 谢谢你的链接,如果需要我会参考它。【参考方案4】:就我而言,我试图更新保存在核心数据中的数据。但每次它都返回旧数据(不是更新版本)
保存成功的消息正在与您相同的控制台中打印
这里有一些简单的步骤最终解决了我的问题
使用NSFetchRequest
获取数据
将数据保存到临时变量中
从核心数据中删除旧数据
修改临时变量中的数据
最后保存上下文
这是我的更新数据函数
func updateUserData(_ userDetails: UserModel)
let request = UserDetails.fetchRequest() as NSFetchRequest<UserDetails>
do
let result = try persistentContainer.viewContext.fetch(request)
if let data = result.first?.userData as Data?
var loginModel = LoginModel(data: data)
loginModel?.user = userDetails
self.clearUserData() //deleting old data
self.userLoginData = loginModel?.jsonData
catch let error as NSError
debugPrint(error.localizedDescription)
【讨论】:
以上是关于无法将值保存到核心数据的主要内容,如果未能解决你的问题,请参考以下文章