[英]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.