我有一个带有大约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 它认为记录是空的并且跳过所需的行。
感谢任何帮助
答案 0 :(得分:1)
您正在两个保存功能中创建单独的对象。在每种情况下,您只设置其中一个属性,因此在调用saveSpeciesName之后,您将创建一个具有物种名称设置的对象,并且在调用saveCommonName之后,您将创建一个具有公共名称集的不同对象。您需要在同一对象上设置物种名称和公共名称。