Posts

Post not yet marked as solved
0 Replies
121 Views
I am currently trying to create an IOS app that mirrors the one I have developed on Android. I am new to Swift, but had little trouble learning some of the basics. My app has a separate class that outputs html. I use the output html to be run using the loadHTMLString(html, baseURL) to display on the app. The user use pickers to select different parameters, but after selecting the parameters, the webView does not update the html. Using the print() method show that the new parameters get called. Here is the WKWebview struct, called Distance List import WebKit import SwiftUI struct DistanceList: UIViewRepresentable {      //Parameters for html String to update     var jump1type: String     var jump2type: String     //More parameters to come               //Create webview     var distanceList = WKWebView()        func makeUIView(context: Context) -> some WKWebView {         return distanceList     }          func updateUIView(_ uiView: UIViewType, context: Context) {         print("DistanceList.updateUIView(" + uiView.description + ", context) \njump1Type: " + jump1type)         //Invoke WKWebview extension method updateValues         distanceList.updateValues(jump1type: jump1type, jump2type: jump2type)     } } // - struct DistanceList: UIViewRepresentable extension WKWebView{     /**         * updates the HTML string and then calls it to be reloaded      */     func updateValues(jump1type: String, jump2type: String){         //Check that this method has been invoked correctly         print("DistanceList.udateValues("+jump1type+", " + jump2type + ") ")         //Creates a new HTML String from a static method in class Utils         let html: String = Utils.getDistance(jumpType1: jump1type, jumpType2: jump2type, lineType: "Jumping Round", horseType: "Horse", height1: 1.10, height2: 1.10, slope: "Flat")         //Load update html         loadHTMLString(html, baseURL: Bundle.main.resourceURL)         //Clean and clear cache         clean()     }          func clean() {             guard #available(iOS 9.0, *) else {return}             HTTPCookieStorage.shared.removeCookies(since: Date.distantPast)             WKWebsiteDataStore.default().fetchDataRecords(ofTypes: WKWebsiteDataStore.allWebsiteDataTypes()) { records in                 records.forEach { record in                     WKWebsiteDataStore.default().removeData(ofTypes: record.dataTypes, for: [record], completionHandler: {})                     #if DEBUG                         print("WKWebsiteDataStore record deleted:", record)                     #endif                 }             }     } } And here is the ContentView: import SwiftUI import UIKit import WebKit struct ContentView: View {          //Selection variables for Pickers     @State var jump1Selection = 0     @State var jump2Selection = 0     @State var useSelection = 0     @State var horseSizeSelection = 0     @State var height1Selection = 0     @State var height2Selection = 0     @State var slopeSelection = 0          //Arrays for Picker content     var jumps = [String](arrayLiteral: "Vertical", "Oxer", "Triple", "Wall", "Pole", "Cavalletti")     var uses = [String](arrayLiteral: "Jumping ", "Schooling Exercise", "From Trot")     var horseSizes = [String](arrayLiteral: "Horse", "Pony (large)", "Pony (medium)", "Pony (small)")     var jumpHeights = [String](arrayLiteral: "1.10m", "<0.50m", "0.60m", "0.70m", "0.80m", "0.90m", "1.00m", "1.10m", "1.20m", "1.30m", "1.40m", "1.50m", ">1.50m")     var slopes = [String](arrayLiteral: "Flat", "Downhill", "Uphill")          var body: some View {             VStack{                     Text("Strides Distance Calculator")                     //Jump 1                     Picker(selection: self.$jump1Selection, label: Text("Jump 1")){                         ForEach(0 ..< self.jumps.count){ index in                             Text("\(self.jumps[index])").tag(index)                         }                     }                     //Jump 2                     Picker(selection: self.$jump2Selection, label: Text("Jump 2")){                         ForEach(0 ..< self.jumps.count){ index in                             Text("\(self.jumps[index])").tag(index)                         }                     }                     //Line use                     Picker(selection: self.$useSelection, label: Text("Use")){                         ForEach(0 ..< self.uses.count){ index in                             Text("\(self.uses[index])").tag(index)                         }                     }                     //Horse size                     Picker(selection: self.$horseSizeSelection, label: Text("Horse Size")){                         ForEach(0 ..< self.horseSizes.count){ index in                             Text("\(self.horseSizes[index])").tag(index)                         }                     }                     //Fence 1 height                     Picker(selection: self.$height1Selection, label: Text("1st Fence Height")){                         ForEach(0 ..< self.jumpHeights.count){ index in                             Text("\(self.jumpHeights[index])").tag(index)                         }                     }                     //Fence 2 height                     Picker(selection: self.$height2Selection, label: Text("2nd Fence Selection")){                         ForEach(0 ..< self.jumpHeights.count){ index in                             Text("\(self.jumpHeights[index])").tag(index)                         }                     }                     //Ground slope                     Picker(selection: self.$slopeSelection, label: Text("Slope")){                         ForEach(0 ..< self.slopes.count){ index in                             Text("\(self.slopes[index])").tag(index)                         }                     }                 //Display webview                 //Only using two selections at present                 DistanceList(jump1type: self.jumps[self.jump1Selection], jump2type: self.jumps[self.jump2Selection])             }     } } struct ContentView_Previews: PreviewProvider {     static var previews: some View {         Group {                          ContentView()         }     } } When I run this app, the initial html String is loaded as it should, but the loadHTMLString method does not update to the new html String is loaded. After the second picker is loaded I get the following error code: i022-06-25 09:07:23.333657+1200 Strides Distance Calculator[23957:1326393] [ProcessSuspension] 0x10f005e60 - ProcessAssertion: Failed to acquire RBS assertion 'ConnectionTerminationWatchdog' for process with PID=23972, error: Error Domain=RBSServiceErrorDomain Code=1 "target is not running or doesn't have entitlement com.apple.runningboard.assertions.webkit" Can someone let me know what I am missing or where I am going wrong?
Posted
by Edward168.
Last updated
.