@ -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 ) " )
// 设 置 I D 值 , 用 于 后 续 更 新
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 }
// 确 保 在 主 线 程 上 执 行 C o r e D a t a 操 作
DispatchQueue . main . async {
do {
let context = self . coreDataManager . container . viewContext
// 根 据 I D 查 找 现 有 的 历 史 记 录 项
let fetchRequest : NSFetchRequest < HistoryItem > = 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 )
}