2016-12-29 3 views
0

Ich versuche CoreData zu verwenden, um Markierungen zu speichern und abzurufen, die ein Benutzer in Google Maps mithilfe eines Autocomplete-Widgets markiert. Aber ich bekomme immer eine 'libC++ abi.dylib: mit nicht abgefangener Ausnahme vom Typ NSException beenden' Fehler und bin mir nicht sicher, warum oder was das bedeutet? Es passiert, wenn ich versuche, die Objekte in Core Data zu speichern. HierGoogle speichert Objekte in Core Data - Endung mit nicht abgefangener Ausnahme vom Typ NSException error

ist der entsprechende Code:

func viewController(_ viewController: GMSAutocompleteViewController, didAutocompleteWith place: GMSPlace) { 
    self.place = place 
    let camera = GMSCameraPosition.camera(withLatitude: place.coordinate.latitude, longitude: place.coordinate.longitude, zoom: 15.0) 
    self.vwGMap.camera = camera 
    let marker = GMSMarker() 
    marker.position = CLLocationCoordinate2DMake(place.coordinate.latitude, place.coordinate.longitude) 
    marker.title = place.name 
    marker.snippet = place.formattedAddress 
    marker.map = self.vwGMap 
    marker.icon = GMSMarker.markerImage(with: UIColor.blue) 
    marker.tracksViewChanges = true 
    self.dismiss(animated: true, completion: nil) 
    print("Place name: ", place.name) 
    print("Place address: ", place.formattedAddress) 
    print("Place placeID: ", place.placeID) 
    print("Place attributions: ", place.attributions) 
    print("Place Coordinate:", place.coordinate) 
    //The printing only happens in the terminal 

    let newPlaceName = place.name 
    self.newPlaceName = place.name 
    let newPlaceAddress = place.formattedAddress 
    self.newPlaceAddress = place.formattedAddress! 
    let newPlacePlaceID = place.placeID 
    self.newPlacePlaceID = place.placeID 

    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    let context = appDelegate.persistentContainer.viewContext 
    let newPlace = NSEntityDescription.insertNewObject(forEntityName: "StoredPlace", into: context) 

    newPlace.setValue(newPlaceName, forKeyPath: "name") 
    newPlace.setValue(newPlaceAddress, forKeyPath: "address") 
    newPlace.setValue(newPlacePlaceID 
     , forKeyPath: "placeID") 

    do 
    { 
     try context.save() 
     print("SAVED") 
    } 
    catch 
    { 
     //PROCESS ERROR 
    } 


} 

vielleicht sollte ich das die lassen AppDelegate etc in viewDidLoad werden setzen, aber ich am Ende den gleichen fatalen Fehler.

Ich habe Name, Adresse, placeID als Attribute als Typ 'String' in der StoredPlace-Entität festgelegt.

mehr über den Fehler: Terminating app aufgrund nicht abgefangene Ausnahme 'NSInvalidArgumentException', Grund: '+ entityForName: nil ist keine juristische NSManagedObjectContext Parameter für Entitätsname Suche 'StoredPlace'' *** ersten Wurf Call-Stack:

Was bedeutet dieser Fehler und wie komme ich damit klar?

Antwort

0

Ich habe das jetzt ausgearbeitet und es ist ziemlich albern, aber ein leichter Fehler, sich so an andere zu richten. Wenn Sie nach dem Erstellen des xcdatamodel umbenennen, vergessen Sie nicht, das im Appdelegate zu ändern, wo Sie den Container angeben.So lasst container = NSPersistentContainer (Name: "YOUR RENAMED FILE"), sonst erhalten Sie den oben genannten Fehler!

0

Wo sind Ihre Core Data-Methoden? in diesem ViewController oder in AppDelegate?

+0

Dies ist der ViewController. Ich werde den Beitrag aktualisieren, um die AppDelegate-Methoden anzuzeigen. Ich benutze die neueste Version von Xcode und Swift –

+0

oh mein Gott, danke für die Frage, dass, da es sich herausstellt, ich vergessen habe, den Namen des Containers zu meinem xcdatamodel zu ändern, seit ich es nach der Erstellung .... –

Verwandte Themen