こんにちは私は、コアデータからいくつかの値(ストリングのみ)を格納して取得するためにコアデータを扱っています。ここに私はどのように値を格納しています。コアデータ値はNilを返す
機能:ここで
public func saveStringValue(forKey: String, value: String) -> Bool{
var saved = false
if self.entityName != nil && self.appDelegate != nil{
let context = appDelegate?.persistentContainer.viewContext
if context != nil{
let entity = NSEntityDescription.entity(forEntityName: self.entityName!, in: context!)
let entityHandle = NSManagedObject(entity: entity!, insertInto: context!)
entityHandle.setValue(value, forKey: forKey)
do{
try context?.save()
saved = true
}catch let error as NSError{
saved = false
print("Error : \(error)")
}
}
}
return saved
}
は私が実体に挿入
- タイトルことを印刷コンソールで見ることができます
let historyManager = HistoryManager(entity: "SearchHistory") let titleInserted = historyManager.saveStringValue(forKey: "title", value: book.title!) if(titleInserted == true) { print("Title Inserted to Entity") } if let image = book.imageUrl{ let imageInserted = historyManager.saveStringValue(forKey: "image", value: image) if imageInserted == true{ print("Image Url Inserted to Entity") } }
それを呼び出す方法です
- が実体にImageInsertedここ
は、コアデータストアから値を取得するためのコードがある
public func fetchAll() -> [Book]{
var books = [Book]()
let context = self.appDelegate?.persistentContainer.viewContext
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: self.entityName!)
//let fetchRequest: NSFetchRequest<SearchHistory> = SearchHistory.fetchRequest()
do{
let fetchedBooks = try context?.fetch(fetchRequest)
for aBook in fetchedBooks!{
if let title = aBook.value(forKey: "title"){
let book = Book(title: title as! String)
if let im = aBook.value(forKey: "image"){
book.imageUrl = im as! String
print("ImageUrl : \(im) : ")
}
else{
print("No Value for key : image")
}
books.append(book)
}
}
}
catch let error as NSError{
print("Fetch Error: \(error.localizedDescription)")
}
print("Books : \(books.count)")
return books
}
しかし、私はそれがnilやプリントを返すブックIMAGEURLを取得するためのコードを実行したときに
- キーの値がありません:画像 タイトルは取得しますがimageUrlは取得しません。 この問題を解決するのに手伝ったり、正しい方向に向けることができますか?そして、私がこの問題を抱えている理由とそれを解決する方法を投稿してください。ありがとう。
なぜあなたは聞かせて書いたnewHistory = SearchHistory( context:Context)クラスSearchHistoryはありません。 –
はい、うまくいきました。ありがとう。 –
Xcodeは、コアデータモデルでこのオプションをオフにしない限り、コアデータエンティティのクラスを自動的に作成します。 – Paulw11