From 5ee82e3ab0f5fbae8865b713194f3daad67b8af8 Mon Sep 17 00:00:00 2001 From: zeng Date: Tue, 9 Dec 2025 13:31:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Base/Networking/API/NRNovelAPI.swift | 5 +- ReaderHive/Base/View/NRImageView.swift | 2 +- .../NRExploreNovelContentViewController.swift | 15 ++-- .../VC/NRExploreNovelViewController.swift | 1 - .../Novel/M/NRReadChapterCatalogModel.swift | 19 +++- .../Class/Novel/M/NRReadChapterModel.swift | 9 +- .../V/Reader/NRNovelReadContentTopView.swift | 3 + .../Novel/V/Reader/NRNovelReadGradeView.swift | 1 + .../Novel/V/Reader/NRNovelReadTopView.swift | 4 + .../V/Reader/NRNovelReaderCatalogView.swift | 18 +++- .../NRNovelDetailCatalogViewController.swift | 26 ++++-- .../NRNovelReaderViewController+Page.swift | 10 ++- .../VC/Read/NRNovelReaderViewController.swift | 9 +- .../Novel/VM/NRNovelReadViewModel+Data.swift | 87 +++++++++++-------- .../Class/Novel/VM/NRNovelReadViewModel.swift | 3 + ReaderHive/Delegate/AppDelegate+Config.swift | 3 + .../Libs/KeyedArchiver/NRKeyedArchiver.swift | 27 ++++-- ReaderHive/Libs/Login/NRLoginManager.swift | 2 +- .../Source/en.lproj/Localizable.strings | 2 +- 19 files changed, 166 insertions(+), 80 deletions(-) diff --git a/ReaderHive/Base/Networking/API/NRNovelAPI.swift b/ReaderHive/Base/Networking/API/NRNovelAPI.swift index e22a975..5d3c0c2 100644 --- a/ReaderHive/Base/Networking/API/NRNovelAPI.swift +++ b/ReaderHive/Base/Networking/API/NRNovelAPI.swift @@ -88,14 +88,17 @@ struct NRNovelAPI { } ///查询章节数据 10011 金币不足 10005 提示 - static func requestChapterData(novelId: String, chapterId: String) async -> (NRReadChapterModel?, Int?) { + static func requestChapterData(novelId: String, chapterId: String, isToast: Bool = false, isLoding: Bool = false) async -> (NRReadChapterModel?, Int?) { await withCheckedContinuation { continuation in var param = NRNetwork.Parameters(path: "/novel/getChapterInfo") param.method = .get + param.isToast = isToast + param.isLoding = isLoding param.parameters = [ "short_play_id" : novelId, "short_play_video_id" : chapterId, ] + NRNetwork.request(parameters: param) { (response: NRNetwork.Response) in if response.isSuccess { continuation.resume(returning: (response.data, response.code)) diff --git a/ReaderHive/Base/View/NRImageView.swift b/ReaderHive/Base/View/NRImageView.swift index b9652e1..2eb394a 100644 --- a/ReaderHive/Base/View/NRImageView.swift +++ b/ReaderHive/Base/View/NRImageView.swift @@ -76,7 +76,7 @@ class NRImageView: UIImageView { override func layoutSubviews() { super.layoutSubviews() - placeholderImageView.frame = .init(x: 0, y: 0, width: self.bounds.width * (2 / 3), height: self.bounds.height * (2 / 3)) + placeholderImageView.frame = .init(x: 0, y: 0, width: self.bounds.width * (1 / 3), height: self.bounds.height * (1 / 3)) placeholderImageView.center = .init(x: self.bounds.width / 2, y: self.bounds.height / 2) } diff --git a/ReaderHive/Class/Explore/VC/NRExploreNovelContentViewController.swift b/ReaderHive/Class/Explore/VC/NRExploreNovelContentViewController.swift index 27825a4..46513d9 100644 --- a/ReaderHive/Class/Explore/VC/NRExploreNovelContentViewController.swift +++ b/ReaderHive/Class/Explore/VC/NRExploreNovelContentViewController.swift @@ -90,7 +90,7 @@ extension NRExploreNovelContentViewController { private func nr_setupUI() { view.addSubview(titleLabel) - view.addSubview(moreButton) +// view.addSubview(moreButton) view.addSubview(pageMenuView) view.addSubview(pageView) view.addSubview(lineView) @@ -98,17 +98,18 @@ extension NRExploreNovelContentViewController { titleLabel.snp.makeConstraints { make in make.left.equalToSuperview().offset(12) - make.centerY.equalTo(moreButton) + make.top.equalToSuperview().offset(16) + make.height.equalTo(24) } - moreButton.snp.makeConstraints { make in - make.right.equalToSuperview().offset(-12) - make.top.equalToSuperview().offset(16) - } +// moreButton.snp.makeConstraints { make in +// make.right.equalToSuperview().offset(-12) +// make.top.equalToSuperview().offset(16) +// } pageMenuView.snp.makeConstraints { make in make.left.right.equalToSuperview() - make.top.equalTo(moreButton.snp.bottom).offset(12) + make.top.equalTo(titleLabel.snp.bottom).offset(12) make.height.equalTo(24) } diff --git a/ReaderHive/Class/Explore/VC/NRExploreNovelViewController.swift b/ReaderHive/Class/Explore/VC/NRExploreNovelViewController.swift index 7682676..a70a1ba 100644 --- a/ReaderHive/Class/Explore/VC/NRExploreNovelViewController.swift +++ b/ReaderHive/Class/Explore/VC/NRExploreNovelViewController.swift @@ -7,7 +7,6 @@ import UIKit import SnapKit -//import JXPagingView import JXSegmentedView class NRExploreNovelViewController: NRViewController { diff --git a/ReaderHive/Class/Novel/M/NRReadChapterCatalogModel.swift b/ReaderHive/Class/Novel/M/NRReadChapterCatalogModel.swift index 1e691a3..16f612d 100644 --- a/ReaderHive/Class/Novel/M/NRReadChapterCatalogModel.swift +++ b/ReaderHive/Class/Novel/M/NRReadChapterCatalogModel.swift @@ -29,8 +29,25 @@ class NRReadChapterCatalogModel: NSObject, SmartCodable { @IgnoredKey var chapterModel: NRReadChapterModel? + ///解析一个空白页面 + func parserEmpty() { + let chapterModel = NRReadChapterModel() + if self.is_lock == true { + chapterModel.parserEmpty("Not unlocked yet".localized) + } else { + chapterModel.parserEmpty("Loading".localized) + } + self.chapterModel = chapterModel + } - + ///重新解析全部数据数据 + func parserAllData() { + if self.chapterModel?.novel_txt == nil { + parserEmpty() + } else { + self.chapterModel?.parser() + } + } } diff --git a/ReaderHive/Class/Novel/M/NRReadChapterModel.swift b/ReaderHive/Class/Novel/M/NRReadChapterModel.swift index ffb93f1..afc323d 100644 --- a/ReaderHive/Class/Novel/M/NRReadChapterModel.swift +++ b/ReaderHive/Class/Novel/M/NRReadChapterModel.swift @@ -52,11 +52,6 @@ class NRReadChapterModel: NSObject, SmartCodable { ///解析数据 func parser() { - guard novel_txt != nil else { - self.parserEmpty() - return - } - let tempAttributes = NRNovelReadSetManager.manager.attributes(isTitle: false, isPageing: true) guard !NSDictionary(dictionary: attributes).isEqual(to: tempAttributes) else { return } @@ -77,8 +72,8 @@ class NRReadChapterModel: NSObject, SmartCodable { } ///解析一个空白页面 - func parserEmpty() { - fullContent = NSMutableAttributedString(string: "\n\n\n\n\n" + "Not unlocked yet".localized, attributes: NRNovelReadSetManager.manager.attributes(isTitle: true)) + func parserEmpty(_ text: String) { + fullContent = NSMutableAttributedString(string: "\n\n\n\n\n" + text, attributes: NRNovelReadSetManager.manager.attributes(isTitle: true)) let pageModel = NRReadPageModel() pageModel.content = fullContent diff --git a/ReaderHive/Class/Novel/V/Reader/NRNovelReadContentTopView.swift b/ReaderHive/Class/Novel/V/Reader/NRNovelReadContentTopView.swift index a23087d..feae734 100644 --- a/ReaderHive/Class/Novel/V/Reader/NRNovelReadContentTopView.swift +++ b/ReaderHive/Class/Novel/V/Reader/NRNovelReadContentTopView.swift @@ -33,6 +33,8 @@ class NRNovelReadContentTopView: UIView { var configuration = UIButton.Configuration.plain() configuration.contentInsets = .zero configuration.imagePadding = 12 + configuration.titleAlignment = .center + configuration.titleLineBreakMode = .byTruncatingTail let button = UIButton(configuration: configuration, primaryAction: UIAction(handler: { [weak self] _ in guard let self = self else { return } @@ -99,6 +101,7 @@ extension NRNovelReadContentTopView { backButton.snp.makeConstraints { make in make.left.equalToSuperview().offset(16) make.top.bottom.equalToSuperview() + make.right.lessThanOrEqualToSuperview().offset(-16) } } diff --git a/ReaderHive/Class/Novel/V/Reader/NRNovelReadGradeView.swift b/ReaderHive/Class/Novel/V/Reader/NRNovelReadGradeView.swift index c84c2e7..bbd2aa7 100644 --- a/ReaderHive/Class/Novel/V/Reader/NRNovelReadGradeView.swift +++ b/ReaderHive/Class/Novel/V/Reader/NRNovelReadGradeView.swift @@ -145,6 +145,7 @@ extension NRNovelReadGradeView { nameLabel.snp.makeConstraints { make in make.top.equalTo(coverImageView).offset(8) make.left.equalTo(coverImageView.snp.right).offset(12) + make.right.lessThanOrEqualToSuperview().offset(-16) } starView.snp.makeConstraints { make in diff --git a/ReaderHive/Class/Novel/V/Reader/NRNovelReadTopView.swift b/ReaderHive/Class/Novel/V/Reader/NRNovelReadTopView.swift index 408fddd..e8677db 100644 --- a/ReaderHive/Class/Novel/V/Reader/NRNovelReadTopView.swift +++ b/ReaderHive/Class/Novel/V/Reader/NRNovelReadTopView.swift @@ -32,6 +32,7 @@ class NRNovelReadTopView: UIView { configuration.contentInsets = .zero configuration.image = UIImage(named: "arrow_left_icon_03") configuration.imagePadding = 12 + configuration.titleLineBreakMode = .byTruncatingTail let button = UIButton(configuration: configuration, primaryAction: UIAction(handler: { [weak self] _ in guard let self = self else { return } @@ -62,6 +63,8 @@ class NRNovelReadTopView: UIView { self.viewModel?.showMoreView() })) button.setImage(UIImage(named: "more_icon_01"), for: .normal) + button.setContentHuggingPriority(.required, for: .horizontal) + button.setContentCompressionResistancePriority(.required, for: .horizontal) return button }() @@ -148,6 +151,7 @@ extension NRNovelReadTopView { backButton.snp.makeConstraints { make in make.left.equalToSuperview().offset(16) make.top.bottom.equalToSuperview() + make.right.lessThanOrEqualTo(moreButton.snp.left).offset(-10) } moreButton.snp.makeConstraints { make in diff --git a/ReaderHive/Class/Novel/V/Reader/NRNovelReaderCatalogView.swift b/ReaderHive/Class/Novel/V/Reader/NRNovelReaderCatalogView.swift index 0f00397..a9c4378 100644 --- a/ReaderHive/Class/Novel/V/Reader/NRNovelReaderCatalogView.swift +++ b/ReaderHive/Class/Novel/V/Reader/NRNovelReaderCatalogView.swift @@ -257,16 +257,28 @@ extension NRNovelReaderCatalogView: UITableViewDelegate, UITableViewDataSource { } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + guard let novelId = self.novelModel?.id else { return } + let currentModel = self.catalogDataArr[indexPath.row] + let lastIndex = indexPath.row - 1 var lastModel: NRReadChapterCatalogModel? if lastIndex >= 0 { lastModel = self.catalogDataArr[lastIndex] } ///上一集加锁状态禁止点击 - if lastModel?.is_lock == true { return } - + if lastModel?.is_lock == true { + Task { + let (_, code) = await NRNovelAPI.requestChapterData(novelId: novelId, chapterId: currentModel.id ?? "", isToast: true, isLoding: true) + if code == 200 { + self.didSelected?(indexPath.row) + self.dismiss() + } + } + return + } + self.didSelected?(indexPath.row) - self.dismiss() + self.dismiss() } } diff --git a/ReaderHive/Class/Novel/VC/NRNovelDetailCatalogViewController.swift b/ReaderHive/Class/Novel/VC/NRNovelDetailCatalogViewController.swift index 95fe6ed..0c9fc47 100644 --- a/ReaderHive/Class/Novel/VC/NRNovelDetailCatalogViewController.swift +++ b/ReaderHive/Class/Novel/VC/NRNovelDetailCatalogViewController.swift @@ -142,8 +142,8 @@ extension NRNovelDetailCatalogViewController: UITableViewDelegate, UITableViewDa } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - guard let id = self.novelModel?.id else { return } - let model = dataArr[indexPath.row] + guard let novelId = self.novelModel?.id else { return } + let currentModel = dataArr[indexPath.row] let lastIndex = indexPath.row - 1 var lastModel: NRReadChapterCatalogModel? @@ -152,17 +152,27 @@ extension NRNovelDetailCatalogViewController: UITableViewDelegate, UITableViewDa } if lastModel?.is_lock == true { - - + Task { + let (_, code) = await NRNovelAPI.requestChapterData(novelId: novelId, chapterId: currentModel.id ?? "", isToast: true, isLoding: true) + if code == 200 { + self.pushReadVC(currentModel) + } + } } else { - let vc = NRNovelReaderViewController() - vc.novelId = id - vc.targetCatalogModel = model - self.navigationController?.pushViewController(vc, animated: true) + self.pushReadVC(currentModel) } } + private func pushReadVC(_ model: NRReadChapterCatalogModel) { + guard let novelId = self.novelModel?.id else { return } + + let vc = NRNovelReaderViewController() + vc.novelId = novelId + vc.targetCatalogModel = model + self.navigationController?.pushViewController(vc, animated: true) + } + } extension NRNovelDetailCatalogViewController { diff --git a/ReaderHive/Class/Novel/VC/Read/NRNovelReaderViewController+Page.swift b/ReaderHive/Class/Novel/VC/Read/NRNovelReaderViewController+Page.swift index c07c107..8f470f2 100644 --- a/ReaderHive/Class/Novel/VC/Read/NRNovelReaderViewController+Page.swift +++ b/ReaderHive/Class/Novel/VC/Read/NRNovelReaderViewController+Page.swift @@ -156,8 +156,14 @@ extension NRNovelReaderViewController { ///获取下一页控制器 func getBelowReadController() -> UIViewController? { - let (catalogModel, pageModel) = self.viewModel.getBelowPageData() - return getReadController(catalogModel: catalogModel, pageModel: pageModel) + let (currentCatalogModel, _) = self.viewModel.getCurrentPageData() + + if currentCatalogModel?.is_lock == true { + return nil + } else { + let (catalogModel, pageModel) = self.viewModel.getBelowPageData() + return getReadController(catalogModel: catalogModel, pageModel: pageModel) + } } ///获取上一页控制器 diff --git a/ReaderHive/Class/Novel/VC/Read/NRNovelReaderViewController.swift b/ReaderHive/Class/Novel/VC/Read/NRNovelReaderViewController.swift index 1e547b6..eb7236a 100644 --- a/ReaderHive/Class/Novel/VC/Read/NRNovelReaderViewController.swift +++ b/ReaderHive/Class/Novel/VC/Read/NRNovelReaderViewController.swift @@ -141,6 +141,11 @@ class NRNovelReaderViewController: NRViewController { self.viewModel.parserAllDataAndReloadPage(dismissMenu: false) } + func reloadData() { + if let vc = self.getCurrentReadController() { + setViewController(displayController: vc, isAbove: false, animated: false) + } + } } extension NRNovelReaderViewController { @@ -227,9 +232,7 @@ extension NRNovelReaderViewController { //校验索引,避免越界 self.viewModel.checkCurrentIndexPath() - if let vc = self.getCurrentReadController() { - setViewController(displayController: vc, isAbove: false, animated: false) - } + self.reloadData() } } diff --git a/ReaderHive/Class/Novel/VM/NRNovelReadViewModel+Data.swift b/ReaderHive/Class/Novel/VM/NRNovelReadViewModel+Data.swift index 5938524..f71994f 100644 --- a/ReaderHive/Class/Novel/VM/NRNovelReadViewModel+Data.swift +++ b/ReaderHive/Class/Novel/VM/NRNovelReadViewModel+Data.swift @@ -78,7 +78,7 @@ extension NRNovelReadViewModel { func parserAllDataAndReloadPage(dismissMenu: Bool = true) { ///重新解析全部数据 self.chapterCatalogList.forEach { - $0.chapterModel?.parser() + $0.parserAllData() } self.checkCurrentIndexPath() @@ -101,7 +101,7 @@ extension NRNovelReadViewModel { let catalogModel = chapterCatalogList[currentSection] let listCount = catalogModel.chapterModel?.pageList?.count ?? 0 - if listCount <= currentRow { + if listCount <= currentRow, listCount > 0 { currentRow = listCount - 1 } self.currentPageIndexPath = IndexPath(row: currentRow, section: currentSection) @@ -118,7 +118,15 @@ extension NRNovelReadViewModel { guard let displayController = vc?.getReadController(catalogModel: catalogModel, pageModel: chapterModel.pageList?.first) else { return } self.vc?.setViewController(displayController: displayController, isAbove: false, animated: false, dismissMenu: dismissMenu) - + //缺少内容数据时,需要加载下真实数据 + if chapterModel.novel_txt == nil { + Task { + guard let _ = await self.requestChapterData(catalogModel) else { return } + await MainActor.run { + self.vc?.reloadData() + } + } + } } else { //没有章节数据,先获取章节数据 Task { guard let _ = await self.requestChapterData(catalogModel) else { return } @@ -155,19 +163,35 @@ extension NRNovelReadViewModel { model.episode = catalogModel.episode model.page = pageModel.page?.intValue NRKeyedArchiver.archiver(folderName: kNRReadRecordFolderName, fileName: novelId, object: model) - NRNovelAPI.requestUploadRecord(novelId, chapterId: catalogModel.id ?? "") + + let lastTime = uploadRecordDate?.timeIntervalSince1970 ?? 0 + let nowTime = Date().timeIntervalSince1970 + + if lastTime == 0 || nowTime - lastTime > 5 {//间隔5秒才能上传一次记录 + uploadRecordDate = Date() + NRNovelAPI.requestUploadRecord(novelId, chapterId: catalogModel.id ?? "") + } } ///获取阅读记录 func getReadRecord() -> NRNovelReadRecordModel? { guard novelId.count > 0 else { return nil } - var recordModel = NRKeyedArchiver.unarchiver(folderName: kNRReadRecordFolderName, fileName: novelId) as? NRNovelReadRecordModel + var recordModel = NRKeyedArchiver.unarchiver(folderName: kNRReadRecordFolderName, fileName: novelId, as: NRNovelReadRecordModel.self) //匹配本地记录与网络记录 if self.novelModel?.progress?.short_play_video_id != "0", self.novelModel?.progress?.short_play_video_id != recordModel?.short_play_video_id { recordModel = self.novelModel?.progress } return recordModel } + + ///设置空白页数据 + func setEmptyData() { + for model in self.chapterCatalogList { + if model.chapterModel == nil { + model.parserEmpty() + } + } + } } //MARK: 网络请求 @@ -186,7 +210,7 @@ extension NRNovelReadViewModel { guard let list = await NRNovelAPI.requestChapterCatalogList(id: self.novelId) else { return } await MainActor.run { self.chapterCatalogList = list - self.addUnlockPageData() + self.setEmptyData() } } ///获取章节数据 @@ -194,30 +218,29 @@ extension NRNovelReadViewModel { func requestChapterData(_ catalogModel: NRReadChapterCatalogModel) async -> NRReadChapterModel? { guard let chapterId = catalogModel.id else { return nil } - let myCoins = NRLoginManager.manager.userInfo?.totalCoins ?? 0 - let lockCoins = catalogModel.coins ?? 0 - - //金币不够解锁 - if catalogModel.is_lock == true, myCoins < lockCoins { - return nil - } - let (model, code) = await NRNovelAPI.requestChapterData(novelId: self.novelId, chapterId: chapterId) - guard let model = model else { return nil } - - model.parser() - ///判断为最后一个章节 - if chapterId == self.chapterCatalogList.last?.id { - model.pageList?.append(NRReadPageModel.createReadFinishModel()) + Task {//开个新的线程更新下用户信息 + await NRLoginManager.manager.updateUserInfo() } - catalogModel.chapterModel = model - - if catalogModel.is_lock == true { - catalogModel.is_lock = false - self.addUnlockPageData() + if code == 200 { + guard let model = model else { return nil } + + model.parser() + ///判断为最后一个章节 + if chapterId == self.chapterCatalogList.last?.id { + model.pageList?.append(NRReadPageModel.createReadFinishModel()) + } + + catalogModel.chapterModel = model + + if catalogModel.is_lock == true { + catalogModel.is_lock = false + } + return model } - return model + + return nil } ///预加载上下两页数据 @@ -249,16 +272,6 @@ extension NRNovelReadViewModel { } } - ///给目录列表中增加未解锁页面数据 - func addUnlockPageData() { - for model in self.chapterCatalogList { - if model.is_lock == true { - let chapterModel = NRReadChapterModel() - chapterModel.parserEmpty() - model.chapterModel = chapterModel - break - } - } - } + } diff --git a/ReaderHive/Class/Novel/VM/NRNovelReadViewModel.swift b/ReaderHive/Class/Novel/VM/NRNovelReadViewModel.swift index e707f02..0488d8d 100644 --- a/ReaderHive/Class/Novel/VM/NRNovelReadViewModel.swift +++ b/ReaderHive/Class/Novel/VM/NRNovelReadViewModel.swift @@ -44,6 +44,9 @@ class NRNovelReadViewModel: NSObject { return tap }() + ///用来记录上报历史记录的时间 + var uploadRecordDate: Date? + } diff --git a/ReaderHive/Delegate/AppDelegate+Config.swift b/ReaderHive/Delegate/AppDelegate+Config.swift index c3376c1..2399ea4 100644 --- a/ReaderHive/Delegate/AppDelegate+Config.swift +++ b/ReaderHive/Delegate/AppDelegate+Config.swift @@ -7,6 +7,7 @@ import UIKit import IQKeyboardManagerSwift import IQKeyboardToolbarManager +import MJRefresh extension AppDelegate { @@ -19,6 +20,8 @@ extension AppDelegate { IQKeyboardManager.shared.resignOnTouchOutside = true IQKeyboardToolbarManager.shared.isEnabled = false + MJRefreshConfig.default.languageCode = NRLocalizedManager.shared.mjLocalizedKey + let appearance = UINavigationBar.defaultAppearance() UINavigationBar.appearance().scrollEdgeAppearance = appearance UINavigationBar.appearance().standardAppearance = appearance diff --git a/ReaderHive/Libs/KeyedArchiver/NRKeyedArchiver.swift b/ReaderHive/Libs/KeyedArchiver/NRKeyedArchiver.swift index 41a9623..7249676 100644 --- a/ReaderHive/Libs/KeyedArchiver/NRKeyedArchiver.swift +++ b/ReaderHive/Libs/KeyedArchiver/NRKeyedArchiver.swift @@ -17,21 +17,34 @@ class NRKeyedArchiver: NSObject { class func archiver(folderName:String, fileName:String, object:AnyObject) { var path = documentDirectoryPath + "/\(mineFolderName)/\(folderName)" + guard creat_file(path: path) else { return } // 创建文件夹成功或者文件夹存在 - if creat_file(path: path) { // 创建文件夹成功或者文件夹存在 - - path += "/\(fileName)" - - NSKeyedArchiver.archiveRootObject(object, toFile: path) + path += "/\(fileName)" + let url = URL(fileURLWithPath: path) + do { + let data = try NSKeyedArchiver.archivedData(withRootObject: object, requiringSecureCoding: true) + try data.write(to: url, options: .atomic) + } catch let error { + nrPrint(message: error) } } /// 解档文件 - class func unarchiver(folderName:String, fileName:String) ->AnyObject? { + class func unarchiver(folderName:String, fileName:String, as type: T.Type) -> T? { let path = documentDirectoryPath + "/\(mineFolderName)/\(folderName)/\(fileName)" - return NSKeyedUnarchiver.unarchiveObject(withFile: path) as AnyObject? + let url = URL(fileURLWithPath: path) + + do { + let data = try Data(contentsOf: url) + let result = try NSKeyedUnarchiver.unarchivedObject(ofClass: type, from: data) + return result + + } catch let error { + nrPrint(message: error) + } + return nil } /// 删除归档文件 diff --git a/ReaderHive/Libs/Login/NRLoginManager.swift b/ReaderHive/Libs/Login/NRLoginManager.swift index 1d2ac9a..74b770b 100644 --- a/ReaderHive/Libs/Login/NRLoginManager.swift +++ b/ReaderHive/Libs/Login/NRLoginManager.swift @@ -23,7 +23,7 @@ class NRLoginManager: NSObject { func updateUserInfo() async { guard let userInfo = await NRUserAPI.requestUserInfo() else { return } self.userInfo = userInfo - UserDefaults.nr_setObject(token, forKey: kNRUserInfoDefaultsKey) + UserDefaults.nr_setObject(userInfo, forKey: kNRUserInfoDefaultsKey) await MainActor.run { NotificationCenter.default.post(name: NRLoginManager.userInfoUpdateNotification, object: nil) diff --git a/ReaderHive/Source/en.lproj/Localizable.strings b/ReaderHive/Source/en.lproj/Localizable.strings index fb4976e..411e747 100644 --- a/ReaderHive/Source/en.lproj/Localizable.strings +++ b/ReaderHive/Source/en.lproj/Localizable.strings @@ -82,7 +82,7 @@ "Bonus" = "Bonus"; "Top Up" = "Top Up"; "Language" = "Language"; - +"Loading" = "Loading";