我正在尝试使用 Core Data 保存两种类型的数组。一个数组包含 UIimages,另一个数组包含视频的 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
}
我打印出保存消息。但是,在尝试将它们加载到 Collection View 中时,我遇到了崩溃。
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
}
Collection View 应该返回与数组中一样多的缩略图。但是它崩溃了,并将我带到应用程序委托(delegate)文件。
我设置了一个断点
let results = try context.fetch(request)
然后它转到断点。
然后我设置另一个断点在
if results.count > 0 {
然后应用程序崩溃并将我带到应用程序委托(delegate)并出现此错误:
Terminating app due to uncaught exception
'NSInvalidArgumentException',
reason: '-[Content initWithCoder:]:
unrecognized selector sent to instance 0x174a6d840'
最佳答案
您的内容实体需要遵守 NSCoding 协议(protocol)。 为此,您需要实现以下两种方法
required init?(coder aDecoder: NSCoder) {
}
func encodeWithCoder(aCoder: NSCoder) {
}
关于ios - 尝试从核心数据中获取数据时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45452421/