如何在 SWIFT 中保存核心数据中的值



我必须在使用地址簿收到的联系人上应用复选标记。当我选择联系人时,会出现复选标记,但滚动后它会消失。其次,我必须将这些选定的联系人保存到核心数据中。看看它,告诉我我做错了什么。我用核心数据做了什么错。

 class LogItem: NSManagedObject {
        @NSManaged var section: String
        @NSManaged var keys: String
    }

现在像这样声明这个类的对象:

let newItem = NSEntityDescription.insertNewObjectForEntityForName("LogItem", inManagedObjectContext: self.managedObjectContext!) as! LogItem
    newItem.section = "section Title"
    newItem.keys = "keys text"
}

您可以按如下方式获取数据:

        //  request using the LogItem entity
        let fetchRequest = NSFetchRequest(entityName: "LogItem")
        // Execute the fetch request, and cast the results to an array of LogItem objects
        if let fetchResults = managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as? [LogItem] {
println(fetchResults[0].section)     // prints "section title"
println(fetchResults[0].key)  // prints key text
    }

请确保核心数据只能保存属性。

根据苹果文档,"核心数据框架提供 与以下相关常见任务的通用和自动化解决方案 对象生命周期和对象图管理,包括持久性。

首先,添加 CoreData,然后转到 AppDelegate,您将看到以下代码:

 lazy var persistentContainer: NSPersistentContainer = {
     let container = NSPersistentContainer(name: "Model_data")
     container.loadPersistentStores(completionHandler: { (storeDescription, error) in
         if let error = error as NSError? {
             fatalError("Unresolved error (error), (error.userInfo)")
         }
     })
     return container
 }()

在:让容器。 。 。您会看到(名称:"Model_data")此名称必须与模型文件名相同。

然后转到视图控制器并添加:

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let newItem = Item(context: self.context)

项是模型对象中的实体。

将 newItem 添加到数组中,例如:

self.itemArray.append(newItem)

然后,添加下一个逻辑:

 fileprivate func saveContext() {
     do {
         try context.save()
         // if it is table view, you need to reload here. tableView.reloadData()
     } catch {
         print("Failed to with error: (error)")
     }
 }

如果加载有问题,请添加以下逻辑:

fileprivate func loadContext() {
    let request: NSFetchRequest<Item> = Item.fetchRequest()
    do {
        itemModel = try context.fetch(request)
    } catch {
        print("Error in request: (error)")
    }
}

保存并加载。

最新更新