2017-06-18 1 views
-1

Je suis assez nouveau à Xcode et je pense que c'est l'organisation de mon code qui développe cette erreur Ce que je vise est aussi longtemps que l'utilisateur est dans le rayon de x miles, ils peuvent obtenir 10 points quand ils cliquent sur un bouton et je veux que ces points pour enregistrerObtenir une erreur pour les valeurs par défaut de l'utilisateur dans swift

ce que mon contrôleur de vue a la carte qui montre l'emplacement actuel de l'utilisateur, une étiquette qui dit "total des points" et un bouton qui lorsqu'il est pressé, va vérifier si l'utilisateur est à l'emplacement souhaité

import UIKit 
import MapKit 
import CoreLocation 

class ViewController: UIViewController ,CLLocationManagerDelegate 

{ 

    @IBOutlet var pointsLabel: UILabel! 

    @IBOutlet var getPointsOutlet: UIButton! 

    @IBOutlet weak var map: MKMapView! 


    let manager = CLLocationManager() 

    var Points = 0 



    override func viewDidLoad() 

    { 
     super.viewDidLoad() 

    //getting an error for the line below saying "cannot call value of non-funtion type 'UserDefaults' " 


     var PointsDefault = UserDefaults.standard 

     if (PointsDefault.value(forKey: "Points") != nil) 
     { 

//got an error here saying " 'Any? is not convertible to 'NSInteger!' " 
      Points = PointsDefault.valueForKey("Points") as NSInteger! 

//getting an error below saying "cannot assign value of type 'NSString' to type 'String?' " 
      pointsLabel.text = NSString(format: "Points : %i", Points) 
     } 



     manager.delegate = self 
     manager.desiredAccuracy = kCLLocationAccuracyBest 
     manager.requestWhenInUseAuthorization() 
     manager.startUpdatingLocation() 


    } 


    func locationManager(_ manager: CLLocationManager, didUpdateLocations  locations: [CLLocation]) 
    { 
     let location = locations[0] 

     let span:MKCoordinateSpan = MKCoordinateSpanMake(0.01, 0.01) 
     let myLocation:CLLocationCoordinate2D =  CLLocationCoordinate2DMake(location.coordinate.latitude,  location.coordinate.longitude) 
     let region:MKCoordinateRegion =  MKCoordinateRegionMake(myLocation, span) 
     map.setRegion(region, animated: true) 

     self.map.showsUserLocation = true 



    } 



    override func didReceiveMemoryWarning() 

    { 
     super.didReceiveMemoryWarning() 
    } 



    @IBAction func getPoints(_ sender: Any) 
    { 

     if let userLocation = manager.location 
     { 

      let desiredLocation = CLLocation(latitude: 50.000000, longitude: -80.000000) 
      let radius: Double = 0.25 // miles 
      let distance = desiredLocation.distance(from: userLocation) 
      if distance < radius 
      { 
       Points += 10 
//getting an error below saying "cannot assign value of type 'NSString' to type 'String?' " 
       pointsLabel.text = NSString(format: "Points : %i", Points) 

      } 

     //getting an error for the line below saying to delete the() but when i do i get plenty more errors 

      var PointsDefault = NSUserDefaults.standardUserDefaults() 
      PointsDefault.setValue(Points, forKey: "Points") 
      PointsDefault.synchronize() 

     } 


    } 


    } 

enter image description here

MISE À JOUR: toutes les erreurs dans mon code ont été corrigés, mais quand je le lance-je obtenir ces erreurs

+0

Veuillez inclure le message d'erreur que vous obtenez. –

+0

okay j'ai fourni le message dans ma nouvelle édition^ –

Répondre

0

UserDefaults.standardUserDefaults() a été modifié d'une méthode à une propriété et est maintenant appelé à Swift UserDefaults.standard 3.

(édité)

En ce qui concerne l'étiquette, vous pouvez jeter à String:

pointsLabel.text = NSString(format: "Points : %i", Points) as? String 

ou tout simplement en utilisant l'interpolation de chaîne:

pointsLabel.text = "Points: \(Points)" 

Vous pouvez obtenir des valeurs entières de UserDefaults comme ceci:

Points = PointsDefault.integer(forKey: "Points") 

En outre, pour faciliter la lecture de votre code, vous devez utiliser les initiales minuscules pour vos variables (var) et les constantes (let), et les initiales majuscules pour les noms de types (classes, structures, ...).

+0

Je viens de télécharger une image dans ma question ci-dessus de quelles erreurs je reçois quand je lance l'application, votre aide serait très appréciée –

+0

À première vue, ces problèmes ne semblent pas être directement lié au code que vous avez publié. Vous pouvez rencontrer des problèmes dans d'autres parties de votre application, qui ne peuvent pas être diagnostiquées en regardant ces messages. Vous devez utiliser le débogueur Xcode et/ou Instruments pour comprendre les causes de ces problèmes. En particulier, assurez-vous qu'il n'y a pas d'erreurs dans votre storyboard ou vos nibs, car certaines de ces fuites mentionnent UINib. –