La mise à jour de Xcode 6.3 cause l'échec de l'application qui fonctionne – ce qui fonctionnait maintenant ne fonctionne pas

Je ne sais pas si quelqu'un d'autre a vécu cela, mais j'ai une application que je construis et ça marchait très bien. Puis j'ai stupidement permis à mac d'installer et de xcode jour xcode . La prochaine chose que je sais, j'ouvre le projet et la construction échoue avec 21 erreurs. J'ai fixé 20 d'entre eux. Incidemment, quiconque rencontre ce problème avec les erreurs PF_Nullability , vérifiez cela .

Cela a fonctionné pour 20 erreurs, mais le dernier est dans une fonction qui fonctionnait correctement. Dans cette fonction, j'interroge une class de données sur parse.com et obtiens un object random pour remplir des variables dans ma vue controller/app/whatevers . Je mets la fonction ci-dessous pour que vous puissiez voir le tout, mais c'est la ligne erronée:

  countQuery.countObjectsInBackgroundWithBlock { (count: Int32, error: NSError!) -> Void in There error: cannot invoke 'countobjectsinbackgroundwithblock' with an argument list of type '((Int32, NSError!) - Void in)' 

Voici toute la fonction et voici en espérant que c'est juste une chose de syntaxe comme les 20 autres corrections:

  func CallData() { var countQuery = PFQuery(className: "QandA") countQuery.countObjectsInBackgroundWithBlock { (count: Int32, error: NSError!) -> Void in if (error == nil) { let randomNumber = Int(arc4random_uniform(UInt32(count))) var query = PFQuery(className: "QandA") query.skip = randomNumber query.limit = 1 query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]!, error: NSError!) -> Void in if (error == nil) { var object: AnyObject = objects[0] self.Question = object ["Question"] as Ssortingng! self.Answers = object ["Answers"] as Array! self.Answer = object ["Answer"] as Ssortingng! if (self.Answers.count > 0) { self.QuestionLabel.text = self.Question self.Button1.setTitle(self.Answers[0], forState: UIControlState.Normal) self.Button2.setTitle(self.Answers[1], forState: UIControlState.Normal) self.Button3.setTitle(self.Answers[2], forState: UIControlState.Normal) self.Button4.setTitle(self.Answers[3], forState: UIControlState.Normal) } } else { NSLog("Something is wrong with the find request, dude. Sorry. %@", error) } } } else { NSLog("Something is wrong with the count request, dude. Sorry. %@", error) } } } 

Des idées sur la façon de se débarrasser de cette erreur? Pourquoi ça ne marche pas maintenant quand ça marche? Je vous remercie.

Eh bien, une erreur a fini par aboutir à une autre, mais j'ai finalement réussi à le résoudre … c'était essentiellement de la syntaxe (lancer des erreurs aussi, je suppose, mais essentiellement des erreurs de syntaxe dans le casting … Je suppose … , un point d'exclamation là-bas … Je suis un newb, donc je n'ai vraiment aucune idée, je me débrouille juste avec des essais et des erreurs) mais voici ce qui a fonctionné:

  func CallData() { var countQuery = PFQuery(className: "QandA") countQuery.countObjectsInBackgroundWithBlock { (count: Int32, error: NSError?) -> Void in if (error == nil) { let randomNumber = Int(arc4random_uniform(UInt32(count))) var query = PFQuery(className: "QandA") query.skip = randomNumber; query.limit = 1 query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]?, error: NSError?) -> Void in if (error == nil) { var object: AnyObject = objects![0] self.Question = object ["Question"] as! Ssortingng! self.Answers = object ["Answers"] as! Array! self.Answer = object ["Answer"] as! Ssortingng! if (self.Answers.count > 0) { self.QuestionLabel.text = self.Question self.Button1.setTitle(self.Answers[0], forState: UIControlState.Normal) self.Button2.setTitle(self.Answers[1], forState: UIControlState.Normal) self.Button3.setTitle(self.Answers[2], forState: UIControlState.Normal) self.Button4.setTitle(self.Answers[3], forState: UIControlState.Normal) } } else { NSLog("Something is wrong with the find request, dude. Sorry. %@", error!) } } } else { NSLog("Something is wrong with the count request, dude. Sorry. %@", error!) } } } 

Pourquoi ne pas juste:

  1. Accédez à https://developer.apple.com/downloads/index.action?name=Xcode (nécessite un count de développeur) et téléchargez Xcode 6.2 DMG.
  2. Renommer dans / Applications actuelle application Xcode 6.3 (il s'appelle juste Xcode) à Xcode-6.3
  3. Montez DMG téléchargé, puis copyz Xcode aux applications.
  4. Xcode est maintenant Xcode 6.2

J'utilise cette approche pour que Xcode soit toujours le dernier. De cette façon, je peux build d'anciens projets en passant juste au bon Xcode (je mets toutes les icons sur Dock).

Note: ceci est une solution de contournement à votre problème principal. Dans un proche avenir, vous devriez passer à Xcode 6.3 & Swift 1.2, mais en attendant vous pouvez build à nouveau

Télécharger la dernière version de Parse pour résoudre ce problème.

https://www.parse.com/docs/downloads/

Il y a un outil dans Xcode pour aider à convertir votre Swift 1.1 en 1.2 – Aller à Edition> Convertir