簡體   English   中英

提取核心數據問題

[英]Fetching core data issue

我有一個帶有約2000條記錄的SQLite數組,所有記錄都列在tableview中。 選擇其中一個記錄后,它將轉到“ speciesDetailViewController”,顯示該項目的詳細信息,包括該物種的通用名稱。

當前,所有顯示的字段均不可編輯。

我現在為用戶添加了更改字段之一,它們的通用名以及為每個物種添加注釋的功能。

微小的更改保存在CoreData中,因為我沒有使用SQLite的經驗(有人雇用)。

我相當確定數據正在存儲,因為我有顯示的打印命令。

我的問題似乎是在檢索數據。

請注意,由於編輯此字段是可選的,因此並不是每個物種都會在coreData中有記錄,只有用戶更新了其通用名稱的物種才有記錄。

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)")
    }
}

這是檢索功能

func retrieveCoreDataSpecies () {

 let context = (UIApplication.shared.delegate
 as! AppDelegate).persistentContainer.viewContext

 let entity = NSEntityDescription.entity(
 forEntityName: "SpeciesDetailData", in: context)


 let request: NSFetchRequest<SpeciesDetailData> = SpeciesDetailData.fetchRequest()
 request.entity = entity

 let pred = NSPredicate(format: "speciesName = %@", specieDetail.specie)
 request.predicate = pred

 do {
 let results = try context.fetch(request as!
 NSFetchRequest<NSFetchRequestResult>)

    if (results.count > 0) {

 let match = results[0] as! NSManagedObject

        if speciesDetailData?.commonName != nil {

            ckCommonNameTextField.text = match.value(forKey: "commonName") as? String

        } else {

        }

        if ckNotesTextView.text == "" || ckNotesTextView.text == nil {
        } else {

            ckNotesTextView.text = match.value(forKey: "speciesNote") as! String
        }
    }

 } catch let error {

 print("Count not fetch \(error), \(error.localizedDescription)")
 }
}

當它到達
如果speciesDetailData?.commonName!= nil,則認為記錄為空,並跳過所需的行。

任何幫助表示贊賞

您正在兩個保存功能中創建單獨的對象。 在每種情況下,您都只設置一個屬性,因此,在調用saveSpeciesName之后,您將創建一個設置了物種名稱的對象,在調用saveCommonName之后,將創建了一個設置了通用名稱的對象。 您需要在同一對象上同時設置種類名稱和通用名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM