获取核心数据问题

时间:2016-12-17 19:28:16

标签: swift core-data swift3

我有一个带有大约2000条记录的SQLite的数组,所有这些都列在tableview上。当选择其中一个记录时,它会转到" speciesDetailViewController"它是否显示该项目的详细信息,包括该物种的通用名称。

目前,所有显示的字段都不可编辑。

我现在正在添加用户更改其中一个字段,它们的通用名称以及为每个物种添加注释的功能。

由于我没有使用SQLite(雇用某人)的经验,因此较小的更改会保存在CoreData中。

我相当确定数据是存储的,因为我有打印命令显示。

我的问题似乎是检索数据。

请注意,编辑此字段是可选的,并非每个物种都会在coreData中有记录,只有用户更新其常用名称的物种。

 self.inputToolbar?.contentView.rightBarButtonItem?.setImage(UIImage(named: "send"), for: .normal)

class SpeciesDetailData: NSManagedObject
{
    @NSManaged var speciesName: String
    @NSManaged var commonName: String
    @NSManaged var commonForeignName: String
    @NSManaged var speciesNote: String
}

这是检索功能

var speciesDetailData : SpeciesDetailData?

var speciesDataObject: [NSManagedObject] = []
var speciesNameToSave = String()


@IBAction func ckSaveCommonNameButton(_ sender: Any) {

    speciesNameToSave = speciesLabel.text!
    self.saveSpeciesName(speciesName: speciesNameToSave)

    let commonNameToSave = ckCommonNameTextField.text
    self.saveCommonName(commonName: commonNameToSave!)

   }



func saveCommonName (commonName: String) {

    guard let appDelegate =
        UIApplication.shared.delegate as? AppDelegate else {
            return
    }

    let managedContext = appDelegate.persistentContainer.viewContext
    let entity = NSEntityDescription.entity(forEntityName: "SpeciesDetailData", in: managedContext)!
    let saveEntity = NSManagedObject(entity: entity, insertInto: managedContext)
    saveEntity.setValue(commonName, forKey: "commonName")

    saveSpeciesName(speciesName: speciesNameToSave)

    do {
        try managedContext.save()
        speciesDataObject.append(saveEntity)

        print(commonName)

    } catch let error as NSError {
        print("Could not save. \(error), \(error.userInfo)")
    }
}

func saveSpeciesName (speciesName: String) {

    guard let appDelegate =
        UIApplication.shared.delegate as? AppDelegate else {
            return
    }

    let managedContext = appDelegate.persistentContainer.viewContext
    let entity = NSEntityDescription.entity(forEntityName: "SpeciesDetailData", in: managedContext)!
    let saveEntity = NSManagedObject(entity: entity, insertInto: managedContext)
    saveEntity.setValue(speciesName, forKey: "speciesName")

    do {
        try managedContext.save()
        speciesDataObject.append(saveEntity)

        print(speciesName)

    } catch let error as NSError {
        print("Could not save. \(error), \(error.userInfo)")
    }
}

当它到达时    如果speciesDetailData?.commonName!= nil 它认为记录是空的并且跳过所需的行。

感谢任何帮助

1 个答案:

答案 0 :(得分:1)

您正在两个保存功能中创建单独的对象。在每种情况下,您只设置其中一个属性,因此在调用saveSpeciesName之后,您将创建一个具有物种名称设置的对象,并且在调用saveCommonName之后,您将创建一个具有公共名称集的不同对象。您需要在同一对象上设置物种名称和公共名称。