私は約2000レコードのSQLiteを持つ配列を持っており、すべてがテーブルビューにリストされています。レコードの1つが選択されると、その種の共通名を含むその項目の詳細が表示され、「speciesDetailViewController」に移動します。コアデータの問題を取得します。
現在、表示されているすべてのフィールドは編集できません。
フィールドの1つ、共通名、種ごとにメモを追加する機能をユーザーが変更できるようになりました。
私はSQLite(雇用された人)の経験がないので、マイナーな変更はCoreDataに保存されます。
データを表示しているので、データが保存されています。
私の問題はデータを取得しているようです。
このフィールドの編集はオプションであるため、すべての種が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を。
ご協力いただき誠にありがとうございます。
* "私はSQLiteの経験がないのでCoreDataに保存されています..." *これは無関係で、同じものではありません。あなたはコアデータを使用するためにSQLiteの経験を持つ必要はありません。 –