コアデータを使用して2種類のアレイを保存しようとしています。一方の配列にはUIimageが含まれ、もう一方の配列にはURLの動画が含まれます。以下の方法で正常に保存できます。アプリケーションコアデータからデータをフェッチしようとするとクラッシュします
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
let newVideo = NSEntityDescription.insertNewObject(forEntityName: "Content", into: context)
videosArray.append(session.outputURL!)
let thumbnail = self.getThumbnail(session.outputURL!)
thumbnails.append(thumbnail)
newVideo.setValue(videosArray, forKey: "videos")
newVideo.setValue(thumbnails, forKey: "thumbnails")
do {
try context.save()
print("Save")
} catch {
print("Error")
// Process error
}
保存メッセージが表示されます。しかし、コレクションビューでそれらをロードしようとするとクラッシュします。
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Content")
request.returnsObjectsAsFaults = false
do {
let results = try context.fetch(request)
if results.count > 0 {
for result in results as! [NSManagedObject] {
if let fetchedThumbnails = (result).value(forKey: "thumbnails") as? Array<Any> {
return fetchedThumbnails.count
}
}
}
} catch {
print("There was a crash fetching content")
}
return 0
}
コレクションビューは、配列内にあるサムネイル数を返すことになっています。しかし、それはクラッシュし、アプリケーションデリゲートファイルに私を連れて行く。
私は
let results = try context.fetch(request)
にブレークポイントを設定し、それがブレークポイントになります。
は、私は
if results.count > 0 {
とアプリのクラッシュで別のブレークポイントを設定し、このエラーでアプリデリゲートに私を取る:
Terminating app due to uncaught exception
'NSInvalidArgumentException',
reason: '-[Content initWithCoder:]:
unrecognized selector sent to instance 0x174a6d840'
「Content」型の宣言を追加できますか? –
コアデータファイルに宣言したらどういう意味ですか? –
@ NandiinBao画像を追加しました –