i’ve created a small Utility that may learn in a Gross sales Examine Image from a Vendor. On this case Rewe. Loading the Knowledge and creating within the SalesCheckView is not any Drawback and the attempt catch block don’t throws an error. However once I go into the SalesCheckListView I do get an empty Swift Knowledge question for my SalesCheck. I’ve different Querys in different Views that do work however this are not looking for what I would like. Perhaps somebody sees my mistake. Thanks in andvance.
My App appears to be like like this:
Foremost
import SwiftUI
import SwiftData
@fundamental
struct TestAppApp: App {
var physique: some Scene {
WindowGroup {
ContentView()
}.modelContainer(for: [ReceiptModel.self, FoodModel.self, ReceiptFoodQuantity.self, SalesCheck.self])
}
}
Content material:
import SwiftUI
struct ContentView: View {
var physique: some View {
MainHub()
}
}
#Preview {
ContentView()
}
Hub
import SwiftUI
struct MainHub: View {
var physique: some View {
NavigationStack{
NavigationLink("Recepits") {
ReceiptAddView()
}
NavigationLink("Meals") {
FoodAddView()
}
NavigationLink("Add Gross sales Examine") {
SalesCheckView()
}
NavigationLink("Gross sales Examine") {
SalesCheckListView()
}
}
}
}
#Preview {
MainHub()
}
SalesCheckView
import SwiftUI
import Imaginative and prescient
@Observable
class ItemPricingModel: Identifiable{
var id : UUID
var identify: String
var value: String
init(identify: String, value: String) {
self.id = UUID()
self.identify = identify
self.value = value
}
}
struct SalesCheckView: View {
@Surroundings(.dismiss) non-public var dismiss
@Surroundings(.modelContext) var context
@State non-public var regonizedText = ""
@State non-public var itemPricingModelList: [ItemPricingModel] = []
var physique: some View {
VStack {
Picture(.test2)
.resizable()
.aspectRatio(contentMode: .match)
Button("acknowledge"){
print("pressed")
loadPhoto()
}
Spacer()
ShoppedListView(itemPricingModelList: $itemPricingModelList)
Button("Save Gross sales Examine"){
let salesCheck = SalesCheck(namePricingModel: itemPricingModelList,vendorName: "Rewe")
print(salesCheck)
context.insert(salesCheck)
do {
attempt context.save()
dismiss()
}
catch { print ("Error saving context: (error)")
}
}
}
.padding()
}
non-public func loadPhoto() {
recognizeText()
}
non-public func recognizeText() {
let picture = UIImage(useful resource: .test2)
guard let cgImage = picture.cgImage else { return }
let handler = VNImageRequestHandler(cgImage: cgImage)
let request = VNRecognizeTextRequest { request, error in
guard error == nil else {
print(error?.localizedDescription ?? "")
return
}
guard let end result = request.outcomes as? [VNRecognizedTextObservation] else { return }
let recogArr = end result.compactMap {end in end result.topCandidates(1).first?.string
}
DispatchQueue.fundamental.async {
self.itemPricingModelList = ReweSalesCheckAnalyzer(scannedSalesCheck: recogArr).analyze()
}
}
request.recognitionLevel = .correct
do {
attempt handler.carry out([request])
} catch {
print(error.localizedDescription)
}
}
}
#Preview {
SalesCheckView()
}
SalesCheckModel
import Basis
import SwiftData
@Mannequin
class SalesCheck{
@Attribute(.distinctive) var id: UUID
var nameString: String
var value: String
var venodrName: String
init(namePricingModel: [ItemPricingModel], vendorName: String) {
var nameString: String = ""
var priceString: String = ""
self.id = UUID()
for (i,merchandise) in namePricingModel.enumerated(){
if i==1{
nameString += merchandise.identify
priceString += merchandise.value
}else{
nameString += ", " + merchandise.identify
priceString += ", " + merchandise.value
}
}
self.nameString = nameString
self.value = priceString
self.venodrName = vendorName
}
}
SalesCheckListView
import SwiftUI
import SwiftData
struct SalesCheckListView: View {
@Question var salesCheckListQuery: [SalesCheck]
var physique: some View {
Button("teste"){
print(salesCheckListQuery)
}
ForEach(salesCheckListQuery) { salesCheck in
Textual content("Vendor (salesCheck.nameString)")
}
}
}