ios - 尝试从核心数据中获取数据时应用程序崩溃

标签 ios swift xcode core-data

我正在尝试使用 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'

Image of how I Declare Entity

最佳答案

您的内容实体需要遵守 NSCoding 协议(protocol)。 为此,您需要实现以下两种方法

required init?(coder aDecoder: NSCoder) {

}

func encodeWithCoder(aCoder: NSCoder) {
}

关于ios - 尝试从核心数据中获取数据时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45452421/

相关文章:

xcode - 如何在 Xcode 中定位代码中的错误而不是内存地址

ios - 不应同时修改和添加对象

ios - 在 Swift 中检查 NSCFBoolean 吗?

ios - Firebase + Geofire 基于属性的复杂查询

ios - UITableViewAutomaticDimension 单元格在滚动或拉动刷新后调整大小

ios - Sprite Kit 加载时间慢

iphone - 如何使用给定的@ 2x的ASIHTTPRequest填充UIImage View ?

ios - 如何在 SWIFT 4 中使用 Twitter REST API 发布直接消息

xcode - 如何使 NSToolbar 中的 Controller 随着 NSSplitViewController 的 View (如 Reeder 或 Mail.app)移动

xcode - 无法更新 Xcode(项目暂时不可用)?