无法将值保存到核心数据

时间:2018-08-06 05:50:10

标签: ios swift core-data appdelegate

我正在尝试将数据存储到AppDelegate本身的Core-Data中,然后从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)")
    }  
}

控制台输出

enter image description here

4 个答案:

答案 0 :(得分: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)
}

答案 1 :(得分:0)

我认为您没有为实体的所有属性提供值,所以请先检查一下。

尝试类似

new.setValue(msgdata,forKey:“ msgdata”)

// msgdata是您要保存在Coredata实体上的

//尝试这样的事情

答案 2 :(得分:0)

 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 :(得分:0)

就我而言,我试图更新保存在核心数据中的数据。但每次它返回旧数据(不是更新版本)

  

保存成功的消息在与您相同的控制台中打印

下面是一些简单的步骤,这些问题终于解决了我的问题

  • 使用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)
    }

}