ios - Apple 是如何在其 iOS 图书应用中实现书签功能的?
问题描述
我正在制作一个类似于 iOS 上内置的 Books App 的 PDF 阅读器。我的书签工作并更新,除非我退出 PDF 视图并返回文档浏览(文件选择器),然后再次打开我的 PDF。然后我的应用程序崩溃:
private func updateBookmarkStatus() {
if let documentURL = pdfDocument?.documentURL?.absoluteString,
let bookmarks = UserDefaults.standard.array(forKey: documentURL) as? [Int],
let currentPage = pdfView.currentPage,
let index = pdfDocument?.index(for: currentPage) {
/*crashes on this line*/: bookmarkButton.image = bookmarks.contains(index) ? #imageLiteral(resourceName: "Bookmark-P") : #imageLiteral(resourceName: "Bookmark-N")
} else {
print("Bookmark Error")
}
}
和
Unexpectedly found nil while implicitly unwrapping an Optional value:
我发表评论的那一行只是将书签更新为“填充版本”,向用户显示该页面已添加书签。
书签更新并在 PDF 中工作。一旦我退出 PDF,浏览文档,然后返回 PDF,它就会崩溃。可能值得注意的是,当我第一次打开 PDF 时,会打印“书签错误”。
如果我不触摸书签按钮,那么我可以转到文档浏览并重新打开 PDF 任意多次。但是一旦我触摸书签按钮,我就无法再次打开我的 PDF 文件。
有什么建议么?
提前致谢。
解决方案
推荐阅读
- php - 为什么可以通过这种方式访问这些文件?
- javascript - 应用程序完全关闭时,如何在特定日期的上午 8:00 通知用户?
- python - 使用python在浏览器中打开URL(非无头)
- jquery - 尝试从 API JQuery 设置图像源时出现问题
- java - 使用 Jsoup 从 HTML 页面中提取数据
- spring-cloud-dataflow - Spring cloud dataflow - 具有外部配置的复合任务
- ios - 将数据从视图控制器传递到 MVC 中的视图 - Swift
- android - 当他的购物车为空时,我如何向用户显示消息,我正在使用 RecyclerAdapter 来显示购物车项目
- python - 返回从列表中选择的大小 n 组合的递归函数
- javascript - 在 Vue.js 中,为什么我的计算属性不起作用