diff --git a/MyQrCode.xcodeproj/xcuserdata/yc.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/MyQrCode.xcodeproj/xcuserdata/yc.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index b80ee3d..0a7f660 100644 --- a/MyQrCode.xcodeproj/xcuserdata/yc.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/MyQrCode.xcodeproj/xcuserdata/yc.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -324,5 +324,21 @@ landmarkType = "7"> + + + + diff --git a/MyQrCode/Views/Generator/CreateQRCodeView.swift b/MyQrCode/Views/Generator/CreateQRCodeView.swift index e544c5b..e656056 100644 --- a/MyQrCode/Views/Generator/CreateQRCodeView.swift +++ b/MyQrCode/Views/Generator/CreateQRCodeView.swift @@ -97,7 +97,7 @@ Button("confirm".localized) { } } message: { Text(alertMessage) } .background( NavigationLink( - destination: QRCodeStyleView(qrCodeContent: generateQRCodeContent(), qrCodeType: selectedQRCodeType, existingStyleData: nil, historyItem: nil), + destination: QRCodeStyleView(qrCodeContent: generateQRCodeContent(), qrCodeType: selectedQRCodeType, existingStyleData: nil), isActive: $navigateToStyleView ) { EmptyView() diff --git a/MyQrCode/Views/Generator/QRCodeStyleView.swift b/MyQrCode/Views/Generator/QRCodeStyleView.swift index 33a44e9..1e9a6b6 100644 --- a/MyQrCode/Views/Generator/QRCodeStyleView.swift +++ b/MyQrCode/Views/Generator/QRCodeStyleView.swift @@ -39,7 +39,15 @@ struct QRCodeStyleView: View { let qrCodeContent: String let qrCodeType: QRCodeType let existingStyleData: QRCodeStyleData? // 可选的现有样式数据 - let historyItem: HistoryItem? // 可选的现有历史记录项 + @State private var id: String? = nil + + // 初始化器 + init(qrCodeContent: String, qrCodeType: QRCodeType, existingStyleData: QRCodeStyleData? = nil, historyItemId: String? = nil) { + self.qrCodeContent = qrCodeContent + self.qrCodeType = qrCodeType + self.existingStyleData = existingStyleData + self._id = State(initialValue: historyItemId) + } @Environment(\.dismiss) private var dismiss @EnvironmentObject var coreDataManager: CoreDataManager @EnvironmentObject var languageManager: LanguageManager @@ -152,7 +160,7 @@ struct QRCodeStyleView: View { qrCodeContent: qrCodeContent, qrCodeType: qrCodeType, styleData: createStyleData(), - historyItem: historyItem + historyItem: nil ), isActive: $showingSavedView ) { @@ -557,7 +565,7 @@ struct QRCodeStyleView: View { // MARK: - 保存二维码 private func saveQRCode() { // 只保存到历史记录,不保存到相册 - if historyItem != nil { + if id != nil { updateExistingHistory() } else { saveToHistory() @@ -656,6 +664,9 @@ struct QRCodeStyleView: View { try context.save() print("✅ 自定义二维码保存成功:\(self.qrCodeContent)") + // 设置ID值,用于后续更新 + self.id = historyItem.id?.uuidString + // 强制刷新历史记录 self.coreDataManager.objectWillChange.send() @@ -675,13 +686,23 @@ struct QRCodeStyleView: View { // MARK: - 更新现有历史记录 private func updateExistingHistory() { - guard let existingHistoryItem = historyItem else { return } + guard let id = id else { return } // 确保在主线程上执行Core Data操作 DispatchQueue.main.async { do { let context = self.coreDataManager.container.viewContext + // 根据ID查找现有的历史记录项 + let fetchRequest: NSFetchRequest = HistoryItem.fetchRequest() + fetchRequest.predicate = NSPredicate(format: "id == %@", id) + + let results = try context.fetch(fetchRequest) + guard let existingHistoryItem = results.first else { + print("❌ 未找到ID为 \(id) 的历史记录项") + return + } + // 保存二维码样式数据 let styleData = self.createStyleData() @@ -1061,7 +1082,7 @@ struct ImagePicker: UIViewControllerRepresentable { // MARK: - 预览 #Preview { - QRCodeStyleView(qrCodeContent: "https://www.example.com", qrCodeType: .url, existingStyleData: nil, historyItem: nil) + QRCodeStyleView(qrCodeContent: "https://www.example.com", qrCodeType: .url, existingStyleData: nil) .environmentObject(CoreDataManager.shared) .environmentObject(LanguageManager.shared) } diff --git a/MyQrCode/Views/History/HistoryView.swift b/MyQrCode/Views/History/HistoryView.swift index 0b04f59..1f2e236 100644 --- a/MyQrCode/Views/History/HistoryView.swift +++ b/MyQrCode/Views/History/HistoryView.swift @@ -325,7 +325,7 @@ Button("delete".localized, role: .destructive) { qrCodeContent: itemToEdit.content ?? "", qrCodeType: getQRCodeType(from: itemToEdit), existingStyleData: getStyleData(from: itemToEdit), - historyItem: itemToEdit + historyItemId: itemToEdit.id?.uuidString ) } }, diff --git a/MyQrCode/Views/History/QRCodeDetailView.swift b/MyQrCode/Views/History/QRCodeDetailView.swift index 1a596c1..6560433 100644 --- a/MyQrCode/Views/History/QRCodeDetailView.swift +++ b/MyQrCode/Views/History/QRCodeDetailView.swift @@ -62,7 +62,7 @@ Button("confirm".localized) { } qrCodeContent: historyItem.content ?? "", qrCodeType: getQRCodeType(), existingStyleData: getStyleData(), - historyItem: historyItem + historyItemId: historyItem.id?.uuidString ), isActive: $navigateToStyleView ) {