2016-05-03 10 views
0

Ich bin mir bewusst, dass es viele andere Fragen wie diese, aber ich versichere Ihnen, das ist kein Duplikat, soweit ich das beurteilen kann. Wie Sie im folgenden Code sehen können, habe ich keine Werte als Optional markiert, aber ich bekomme immer diesen Fehler. Es stürzt ab, wenn ich den snapNext Wert laufen dieUnerwartet gefunden Nil Auspacken ein optionaler Wert

viewMap.camera = newLocation 

Hier hervorzuheben ist der vollständige Code unten, habe ich die viewmap verknüpft nur eine regelmäßige UIView

import UIKit 
import MapKit 
import GoogleMaps 

class ViewController: UIViewController { 

var camera = GMSCameraPosition.cameraWithLatitude(33.600727, longitude: -117.900840, zoom: 16.9) 
@IBOutlet weak var viewMap: GMSMapView! 
override func viewDidLoad() { 
    super.viewDidLoad() 


    viewMap.camera = camera 
    viewMap = GMSMapView.mapWithFrame(CGRectZero, camera: camera) 
    viewMap.myLocationEnabled = true 
    viewMap.settings.myLocationButton = true 


    let marker = GMSMarker() 
    marker.position = CLLocationCoordinate2DMake(33.600727, -117.900840) 
    marker.title = "Newport Beach" 
    marker.snippet = "California" 
    marker.map = viewMap 

    // Do any additional setup after loading the view, typically from a nib. 
} 

@IBAction func snapNext(sender: AnyObject) { 
    let newLocation = GMSCameraPosition.cameraWithLatitude(33.622578, longitude: -117.911099, zoom: 16.9) 
    viewMap.camera = newLocation 

    } 
    override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


} 
+0

Vergewissern Sie sich, dass viewMap mit Ihrem xib oder Storyboard verbunden ist. –

+0

hat gerade bestätigt, dass es – maz

+0

war. Setzen Sie einen Haltepunkt am Anfang der Funktion 'snapNext' und vergewissern Sie sich, dass' viewMap' nicht null ist. – Paulw11

Antwort

1

Ihr Fehler ist in der Zeile:

viewMap = GMSMapView.mapWithFrame(CGRectZero, camera: camera) 

Hier werden Sie die Karte auf ein neues anonymes Objekt einstellen und weil die Karte Eigenschaft schwach ist, wird es zu nil automatisch, sobald das anonyme Objekt gesetzt werden geht außerhalb des Geltungsbereichs (dh wenn viewDidLoad abgeschlossen ist). Entweder möchten Sie das Objekt im Storyboard erstellen; In diesem Fall lassen Sie es als eine schwache Steckdose, oder Sie wollen es nur als eine "normale" Eigenschaft; In diesem Fall entfernen Sie die weak und IBOutlet.

0
import UIKit 
import MapKit 
import GoogleMaps 

class ViewController: UIViewControllerGMSMapViewDelegate , CLLocationManagerDelegate { 

var camera:GMSCameraPosition! 

@IBOutlet weak var viewMap: GMSMapView! 
override func viewDidLoad() { 
    super.viewDidLoad() 

    camera = GMSCameraPosition.cameraWithLatitude(33.600727, longitude: -117.900840, zoom: 16.9) 

    viewMap.camera = camera 
    viewMap = GMSMapView.mapWithFrame(CGRectZero, camera: camera) 
    viewMap.myLocationEnabled = true 
    viewMap.delegate=self 

    viewMap.settings.myLocationButton = true 


    let marker = GMSMarker() 
    marker.position = CLLocationCoordinate2DMake(33.600727, -117.900840) 
    marker.title = "Newport Beach" 
    marker.snippet = "California" 
    marker.map = viewMap 

    // Do any additional setup after loading the view, typically from a nib. 
} 

@IBAction func snapNext(sender: AnyObject) { 
    camera = GMSCameraPosition.cameraWithLatitude(33.622578, longitude: -117.911099, zoom: 16.9) 
    viewMap.camera = camera 

    } 
    override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


} 
+0

Ich glaube nicht, es war möglich, eine "@ IBAction" in der viewDidLoad() hinzufügen? Es gibt mir einen Fehler und sagt mir, das "@ IBAction" Präfix aus der Funktion – maz

+0

kein Chef zu entfernen ... siehe Antwort bearbeiten –

+0

Ich bekomme immer noch den gleichen Fehler – maz

0

Wie Sie bereits erwähnt haben aus der viewMap ist null. Warum es veröffentlicht wird, weiß ich nicht (Brauche mehr Informationen, um das zu wissen). Aber ich weiß, dass Sie es verhindern können, indem Sie das Schlüsselwort weak entfernen.

@IBOutlet weak var viewMap: GMSMapView! 

Dies kann jedoch zu Undichtigkeiten führen, wenn Sie Zyklen zwischen Ihrer viewMap und Ihrem View-Controller beibehalten.