Post

Replies

Boosts

Views

Activity

Metadata rejected - what should I do?
Hello everybody ,Two days ago I submitted my first iOS app. I was super excited. Yesterday my app came back rejected with “metadata rejected”. I am very inexperienced and I kind of panic and tried everything to solve it. I replied in the resolution center and then I made the mistake of clicking submit for review. And now I am waiting.Sorry to bother you but I really would like to hear from somebody with experience what is going to happen now...- Since I clicked submit for review will my app be again in the beginning of the queue?- what happens to my response in the resolution center? Will my reviewer still read it?- How long, in the worst case scenario will it take to get some feedback back?Thank you so much.Best regards,
3
0
10k
Sep ’18
WebKit - webView.navigationDelegate = self
Hello everybody,I am new to iOS development. I am trying to to load a web view into my app. I got it working but there is one line of code that I fundamentally don't understand.override func loadView() { webView = WKWebView() webView.navigationDelegate = self view = webView //Cada ViewController tem uma view associada. }What am I telling to the view when I write webView.navigationDelegate = self? In my head it makes much more sense if it was:self.view = webView.navigationDelegate Can you help me?Thank you! 😀
3
0
2.8k
Feb ’20
Label.text Error! - Unexpectedly found nil while implicitly unwrapping an Optional value: file...
Hello everybody,I am new to iOS development and I found an error that I can not get past. I have read a lot online and on Stackoverflow but I don't understand why this error keeps coming up.I have a table view controller and I want to write text to other view controller using:navigationController?.pushViewController(viewController, animated: true)I have this class where I already have an outlet for the label.import UIKit class PetitionDetailsViewController: UIViewController { @IBOutlet weak var PetitionDetailsOutlet: UILabel! override func viewDidLoad() { super.viewDidLoad() } }On the other class I have this code where I try to add text to the label in the PetitionDetailsViewController after tapping one of the rows in the table view.override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let viewController = PetitionDetailsViewController() print(petitions[indexPath.row].body) viewController.PetitionDetailsOutlet.text = petitions[indexPath.row].body navigationController?.pushViewController(viewController, animated: true) }I don't understand why this error keeps coming up. I have the outlet and initially the label is empty.Why is it nil?
10
0
5.2k
Feb ’20
App Delegate - UIWindow is not working properly
Hello everyone,I am trying to edit a tab bar controller to display more items. I am using a UIWindow but it just does not work. I have followed some tutorials and one thing I noticed is that in everyone of the the window property is already there.In my version of Xcode it is not. I have to declare it myself.Can you help me? Here is the code I am using.It always prints "exits with error". 😟class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? //Window em que a aplicação está a ser executada. //Função chamada pelo iOS quando a app termina de carregar. func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { if let tabBarController = window?.rootViewController as? UITabBarController { //Neste projeto, se repararmos no storyboard o primeiro ecrã que vemos faz referência a um tab bar controller, por isso está tudo dentro dele. //Por isso é que o default view controller é um tab bar controller. let storyboard = UIStoryboard(name: "Main", bundle: nil) let viewController = storyboard.instantiateViewController(identifier: "NavController") //Adicionamos um tabBarItem ao view controller. viewController.tabBarItem = UITabBarItem(tabBarSystemItem: .topRated, tag: 1) //The default value of this property is nil. When configuring a tab bar controller, you can use this property to specify the content for each tab of the tab bar interface. tabBarController.viewControllers?.append(viewController) } else { print("Exits with error.") } return true }
3
0
9.4k
Feb ’20
Dispatch Queue - main and in background situation with var
Hello!I want to verify a property of a tagBarItem but the navigation controller needs to be accessed on the main queue.However, I have a blocking call that I want to be processed in the background.The problem is that in line 15 when I access the value of petitionString it is empty.What am I doing wrong?performSelector(inBackground: #selector(fetchJSON), with: nil)@objc func fetchJSON() { var petitionURLString: String = "" DispatchQueue.main.async { [weak self] in if self?.navigationController?.tabBarItem.tag == 0 { petitionURLString = "https://www.hackingwithswift.com/samples/petitions-1.json" } else { petitionURLString = "https://www.hackingwithswift.com/samples/petitions-2.json" } } if let url = URL(string: petitionURLString) { if let data = try? Data(contentsOf: url) { //Este método é chamado de blocking call bloqueia a execução de código até todos os dados estarem descarregados. //É seguro fazer parsing dos dados mas como pode dar erro usamos try? parseData(json: data) return } } showError() }
1
0
1.2k
Feb ’20
Pass button title to function - nil while unwrapping optiona
Hello everybody,I am using a button trigger in Playgrounds to pass the button title to a function in another class.@objc func letterButtonPressed(_ sender: UIButton) { sender.isHidden = true hiddenButtons.append(sender) letter = sender.currentTitle?.uppercased() if letter != nil { game.checkLetterInWord(letter: letter!) } }In this function above I check if the letter is nil first, so I don't undertstand why the function finds nil...public func checkLetterInWord(letter: String!) -> Bool { print(letter!) let wordCharacters = Array(word) print(wordCharacters) return true }What am I doing wrong? Thank you for you help!
8
0
1.3k
May ’20
Delay updating label text SwiftPlaygrounds
Hello everybody,I am having trouble in updating the text of a label. This only happens when I am about to call another function which is very strange.Here is my code:func updateWordLabelAndCheckVictory(letter: String, indexArray: [Int]) { if let currentLabel = wordLabel.text { var wordArray = Array(currentLabel) for i in indexArray { wordArray[i] = Character(letter) } wordLabel.text = String(wordArray) if (game.checkVictory(label: wordLabel.text!)) { currentGame += 1 presentVictoryView() } } }I update the label in line 11. When the condition in line 13 is met the presentVictoryView method (line 15) executes before the label is updated... I don't really know what I am doing wrong. If I comment line 15 and don't call the presentVictoryView method the label is updated as usual...Could you please help me?Thank you.
4
0
1.2k
May ’20
Animations - frozen view top left corner
Hello everybody,I have an animation to create ballons floating from the bottom to the top of the screen. Despite producing the behaviour I want, at some point, when the ballons are floating upwards the objectView I am using one ballon gets printed at the top left corner of the screen and does not move or disappear.Has this ever happend to any of you?func presentVictoryView(word: String) { blackView.isHidden = false for _ in 0 ... 30 { let objectView = UIView() objectView.translatesAutoresizingMaskIntoConstraints = false objectView.frame = CGRect(x: 0, y: 0, width: 20, height: 100) objectView.backgroundColor = .clear //objectView.alpha = CGFloat(0.9) objectView.isHidden = false let ballon = UILabel() ballon.translatesAutoresizingMaskIntoConstraints = false ballon.frame = CGRect(x: 0, y: 0, width: 20, height: 100) ballon.backgroundColor = .clear //ballon.alpha = CGFloat(0.9) ballon.text = "" ballon.font = UIFont.systemFont(ofSize: 60) objectView.addSubview(ballon) NSLayoutConstraint.activate([ ballon.centerXAnchor.constraint(equalTo: objectView.centerXAnchor), ballon.centerYAnchor.constraint(equalTo: objectView.centerYAnchor) ]) blackView.addSubview(objectView) let randomXOffset = Int.random(in: -120 ..< 200) let path = UIBezierPath() path.move(to: CGPoint(x: 160 + randomXOffset, y: 1000)) path.addCurve(to: CGPoint(x: 100 + randomXOffset, y: -300), controlPoint1: CGPoint(x: 300 - randomXOffset, y: 600), controlPoint2: CGPoint(x: 70 + randomXOffset, y: 300)) let animation = CAKeyframeAnimation(keyPath: "position") animation.path = path.cgPath animation.repeatCount = 1 animation.duration = Double(arc4random_uniform(40) + 30) / 10 //animation.timeOffset = Double(arc4random_uniform(50)) objectView.layer.add(animation, forKey: "animate position along path") } newGame() }I have tried a lot of things... I don't know what I am doing wrong...Thank you!
9
0
1.3k
May ’20
How to change type of font in Label?
Hello everyone,I am working on a Playground and I can change the font type of my label. I have tried doing it in several different ways and I just can't do it.var clueLabel = UILabel() clueLabel.font = UIFont(name: "MarkerFelt-Wide", size: 45) clueLabel.font = UIFont.systemFont(ofSize: 45, weight: .bold) clueLabel.textColor = UIColor.black clueLabel.textAlignment = .center view.addSubview(clueLabel)What am I doing wrong? I want to use the font Marker Felt.Thank you
2
0
809
May ’20
Display annotation Map View with offset
Hello everyone, I want to use a map view to display an annotation but when I place it on the view it always stays in at the center of the map view. I want to give it some offset so that it goes a little bit upwards. This is the code I have so far. Could you please help me? let span = MKCoordinateSpan(latitudeDelta: CLLOcationDegrees, longitudeDelta: CLLOcationDegrees) let region = MKCoordinateRegion(center: observationCoordinates, span: span) let annotation =  MKPointAnnotation() annotation.coordinate = observationCoordinates          uiView.setRegion(region, animated: true) uiView.addAnnotation(annotation) Thank you for your help.
0
0
413
Aug ’20
NavigationLink initializer unused
Hello everybody, I am trying to navigate from one view to another using NavigationView and NavigationLink. I can't figure out what I am doing wrong, but the way I am doing it I get a warning saying: "Result of NavigationLink<Label, Destination> is unused". In fact, I can't navigate to the view I want to open. Here is my code so far: NavigationView { VStack { Button(action: { let observation = self.createObservation() self.records.addObservation(observation) self.isPresented.toggle() NavigationLink(destination: ObservationDetails(observation: observation).environmentObject(self.records)) { EmptyView() } }) {   Text("Classify") } } Thank you for your help!
4
0
5.1k
Sep ’20
Swift - Show Empty map view with error message iOS
Hello everybody, I am building a Map and I am using a map view that I want to be always present in the interface. However, the user can share to show its location or not. The Map view requires a region. But I want to show an empty map view with just the grid on with a message. Do you know if it is possible to achieve that? Thank you! let span = MKCoordinateSpan(latitudeDelta: CLLOcationDegrees, longitudeDelta: CLLOcationDegrees) let region = MKCoordinateRegion(center: observationCoordinates, span: span) &#9;&#9;&#9;&#9; let annotation =&#9;MKPointAnnotation() annotation.coordinate = observationCoordinates &#9;&#9;&#9;&#9; uiView.setRegion(region, animated: true) uiView.addAnnotation(annotation)
2
0
1.4k
Sep ’20
CoreML - Label presented as random string
Hello everybody, I used Google Cloud Platform to create a Machine learning model to perform computer vision. I downloaded the CoreML model from the cloud platform website and followed the instructions in the Google Tutorial for iOS model deployment. This is my code currently. class Classification {          private lazy var classificationRequest: VNCoreMLRequest = {         do {             let model = try VNCoreMLModel(for: AutoML().model)             let request = VNCoreMLRequest(model: model, completionHandler: { [weak self] request, error in                 if let classifications = request.results as? [VNClassificationObservation] {                     print(classifications.first ?? "No classification!")                 }                          })                          request.imageCropAndScaleOption = .scaleFit             return request         }         catch {             fatalError("Error! Can't use Model.")         }     }()          func classifyImage(receivedImage: UIImage) {                  let orientation = CGImagePropertyOrientation(rawValue: UInt32(receivedImage.imageOrientation.rawValue))                  if let image = CIImage(image: receivedImage) {             DispatchQueue.global(qos: .userInitiated).async {                                  let handler = VNImageRequestHandler(ciImage: image, orientation: orientation!)                 do {                     try handler.perform([self.classificationRequest])                 }                 catch {                     fatalError("Error classifying image!")                 }             }         }     } My code executes and I receive this: <VNClassificationObservation: 0x600002091d40> A7DBD70C-541C-4112-84A4-C6B4ED2EB7E2 requestRevision=1 confidence=0.332127 "CICAgICAwPmveRIJQWdsYWlzX2lv" I receive a confidence value but I don't receive a label string. Is there any step I am not taking? With the model there is also a dict.txt file. Is there anything I have to do with that and that I am not doing? Thank you!
3
0
1.5k
Sep ’20
CoreML Model spec - change output type to dictionary [Double : String]
Hello everybody, For the past week I have been struggling to run inference on a classifier I built using Google's AutoML Vision tool. At first I thought everything would go smoothly because Google allows to export a CoreML version of the final model. I assumed I would only need to use Apple's CoreML library to make it work. When I export the model Google provides a .mlmodel file and a dict.txt file with the classification labels. For the current model I have 100 labels. This is my Swift code to run inference on the model. private lazy var classificationRequest: VNCoreMLRequest = { &#9;&#9;&#9;&#9;do { &#9;&#9;&#9;&#9;&#9;&#9;let classificationModel = try VNCoreMLModel(for: NewGenusModel().model) &#9;&#9;&#9;&#9;&#9;&#9;let request = VNCoreMLRequest(model: classificationModel, completionHandler: { [weak self] request, error in &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;self?.processClassifications(for: request, error: error) &#9;&#9;&#9;&#9;&#9;&#9;}) &#9;&#9;&#9;&#9;&#9;&#9;request.imageCropAndScaleOption = .scaleFit &#9;&#9;&#9;&#9;&#9;&#9;return request &#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;catch { &#9;&#9;&#9;&#9;&#9;&#9;fatalError("Error! Can't use Model.") &#9;&#9;&#9;&#9;} &#9;&#9;}() &#9;&#9;func classifyImage(receivedImage: UIImage) { &#9;&#9;&#9;&#9;let orientation = CGImagePropertyOrientation(rawValue: UInt32(receivedImage.imageOrientation.rawValue)) &#9;&#9;&#9;&#9;if let image = CIImage(image: receivedImage) { &#9;&#9;&#9;&#9;&#9;&#9;DispatchQueue.global(qos: .userInitiated).async { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;let handler = VNImageRequestHandler(ciImage: image, orientation: orientation!) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;do { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;try handler.perform([self.classificationRequest]) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;catch { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;fatalError("Error classifying image!") &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;} &#9;&#9;} The problem started when I tried to pass a UIImage to run inference on the model. The input type of the original model was MultiArray (Float32 1 x 224 x 224 x 3). Using Coremltools library I was able to convert the input type to Image (Color 224 x 224) using Python. This worked and here is my code: import coremltools import coremltools.proto.FeatureTypes_pb2 as ft spec = coremltools.utils.load_spec("model.mlmodel") input = spec.description.input[0] input.type.imageType.colorSpace = ft.ImageFeatureType.RGB input.type.imageType.height = 224 input.type.imageType.width = 224 coremltools.utils.save_spec(spec, "newModel.mlmodel") My problem now is with the output type. I want to be able to access the confidence of the classification as well as the result label of the classification. Again using coremltools I was able to to access the output description and I got this. name: "scores" type { &#9;multiArrayType { &#9;&#9;dataType: FLOAT32 &#9;} } I am trying to change it this way: f = open("dict.txt", "r") labels = f.read() class_labels = labels.splitlines() print(class_labels) class_labels = class_labels[1:] assert len(class_labels) == 57 for i, label in enumerate(class_labels): &#9;if isinstance(label, bytes): &#9;&#9;class_labels[i] = label.decode("utf8") classifier_config = ct.ClassifierConfig(class_labels) output = spec.description.output[0] output.type = ft.DictionaryFeatureType Unfortunately this is not working and I can't find information only that can help me... This I don't know what to do next. Thank you for your help!
1
0
2.1k
Sep ’20
Application Setting and User Defaults
Hello, In my application I am going to create a settings screen that will allow the user to change a couple of aspects in terms of how the core feature of the app works. I have been wondering what might be the best way to save the user settings. I have considered global variables, binding variables and user defaults. When it comes to global variables I don't think I have ever used them, with the exception of debugging. I kinda consider it a bad practice and I don't think all the screens of my app should have the ability to see and change this values. Then, there is the possibility of using binding variables. I think this may be like trying to kill a fly with a war tank. I think it is too much and adds a lot of complexity to something that should be pretty straight-forward. Finally, user defaults, to me, seems the best way to go. I can change it and keep persistency and it can be accessed easily. What do you think is the best way to go? Thank you for your help.
3
0
770
Sep ’20