Refactor QRCodeStyleView to remove historyItem parameter and replace it with historyItemId for improved data handling. Update related views to accommodate this change, enhancing the clarity and maintainability of the codebase.

main
v504 1 year ago
parent a1bd7e8420
commit 0c2d070878

@ -324,5 +324,21 @@
landmarkType = "7"> landmarkType = "7">
</BreakpointContent> </BreakpointContent>
</BreakpointProxy> </BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
uuid = "F5CCC84E-47B2-4EC3-BDD3-9AB6697A241C"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "MyQrCode/Views/Generator/QRCodeStyleView.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "620"
endingLineNumber = "620"
landmarkName = "createStyleData()"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
</Breakpoints> </Breakpoints>
</Bucket> </Bucket>

@ -97,7 +97,7 @@ Button("confirm".localized) { }
} message: { Text(alertMessage) } } message: { Text(alertMessage) }
.background( .background(
NavigationLink( NavigationLink(
destination: QRCodeStyleView(qrCodeContent: generateQRCodeContent(), qrCodeType: selectedQRCodeType, existingStyleData: nil, historyItem: nil), destination: QRCodeStyleView(qrCodeContent: generateQRCodeContent(), qrCodeType: selectedQRCodeType, existingStyleData: nil),
isActive: $navigateToStyleView isActive: $navigateToStyleView
) { ) {
EmptyView() EmptyView()

@ -39,7 +39,15 @@ struct QRCodeStyleView: View {
let qrCodeContent: String let qrCodeContent: String
let qrCodeType: QRCodeType let qrCodeType: QRCodeType
let existingStyleData: QRCodeStyleData? // 可选的现有样式数据 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 @Environment(\.dismiss) private var dismiss
@EnvironmentObject var coreDataManager: CoreDataManager @EnvironmentObject var coreDataManager: CoreDataManager
@EnvironmentObject var languageManager: LanguageManager @EnvironmentObject var languageManager: LanguageManager
@ -152,7 +160,7 @@ struct QRCodeStyleView: View {
qrCodeContent: qrCodeContent, qrCodeContent: qrCodeContent,
qrCodeType: qrCodeType, qrCodeType: qrCodeType,
styleData: createStyleData(), styleData: createStyleData(),
historyItem: historyItem historyItem: nil
), ),
isActive: $showingSavedView isActive: $showingSavedView
) { ) {
@ -557,7 +565,7 @@ struct QRCodeStyleView: View {
// MARK: - 保存二维码 // MARK: - 保存二维码
private func saveQRCode() { private func saveQRCode() {
// 只保存到历史记录,不保存到相册 // 只保存到历史记录,不保存到相册
if historyItem != nil { if id != nil {
updateExistingHistory() updateExistingHistory()
} else { } else {
saveToHistory() saveToHistory()
@ -656,6 +664,9 @@ struct QRCodeStyleView: View {
try context.save() try context.save()
print("✅ 自定义二维码保存成功:\(self.qrCodeContent)") print("✅ 自定义二维码保存成功:\(self.qrCodeContent)")
// 设置ID值,用于后续更新
self.id = historyItem.id?.uuidString
// 强制刷新历史记录 // 强制刷新历史记录
self.coreDataManager.objectWillChange.send() self.coreDataManager.objectWillChange.send()
@ -675,13 +686,23 @@ struct QRCodeStyleView: View {
// MARK: - 更新现有历史记录 // MARK: - 更新现有历史记录
private func updateExistingHistory() { private func updateExistingHistory() {
guard let existingHistoryItem = historyItem else { return } guard let id = id else { return }
// 确保在主线程上执行Core Data操作 // 确保在主线程上执行Core Data操作
DispatchQueue.main.async { DispatchQueue.main.async {
do { do {
let context = self.coreDataManager.container.viewContext let context = self.coreDataManager.container.viewContext
// 根据ID查找现有的历史记录项
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() let styleData = self.createStyleData()
@ -1061,7 +1082,7 @@ struct ImagePicker: UIViewControllerRepresentable {
// MARK: - 预览 // MARK: - 预览
#Preview { #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(CoreDataManager.shared)
.environmentObject(LanguageManager.shared) .environmentObject(LanguageManager.shared)
} }

@ -325,7 +325,7 @@ Button("delete".localized, role: .destructive) {
qrCodeContent: itemToEdit.content ?? "", qrCodeContent: itemToEdit.content ?? "",
qrCodeType: getQRCodeType(from: itemToEdit), qrCodeType: getQRCodeType(from: itemToEdit),
existingStyleData: getStyleData(from: itemToEdit), existingStyleData: getStyleData(from: itemToEdit),
historyItem: itemToEdit historyItemId: itemToEdit.id?.uuidString
) )
} }
}, },

@ -62,7 +62,7 @@ Button("confirm".localized) { }
qrCodeContent: historyItem.content ?? "", qrCodeContent: historyItem.content ?? "",
qrCodeType: getQRCodeType(), qrCodeType: getQRCodeType(),
existingStyleData: getStyleData(), existingStyleData: getStyleData(),
historyItem: historyItem historyItemId: historyItem.id?.uuidString
), ),
isActive: $navigateToStyleView isActive: $navigateToStyleView
) { ) {

Loading…
Cancel
Save