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">
</BreakpointContent>
</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>
</Bucket>

@ -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()

@ -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> = 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)
}

@ -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
)
}
},

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

Loading…
Cancel
Save