2016-04-12 7 views
0

Warum werden meine Daten nicht an das Kinvey-Back-End gesendet? Meine App stürzt ab und ich bekomme den Fehler SIGABRT. Ich habe versucht, die String zu NSString zu ändern, aber das hat nicht geholfen. Aus irgendeinem Grund zeigt mein Dashboard in Kinvey API-Aufrufe und Datenspeicherung, speichert aber nichts (ich bin ein Anfänger).SIGABRT Fehler beim Senden von Daten an Kinvey

import UIKit 

class ReservationViewController: UIViewController { 

    @IBOutlet weak var userName: UITextField! 
    @IBOutlet weak var userEmail: UITextField! 
    @IBOutlet weak var userSeat: UITextField! 
    @IBOutlet weak var userDateTime: UIDatePicker! 

    @IBAction func sendReservation(sender: AnyObject) { 
     // STORE DATA 
     let store = KCSAppdataStore.storeWithOptions([ 
      KCSStoreKeyCollectionName : "userReservation", 
      KCSStoreKeyCollectionTemplateClass : Booking.self 
     ]) 
     let reservation = Booking() 
     reservation.name = userName.text 
     reservation.email = userEmail.text 
     reservation.seats = userSeat.text 
     reservation.date = NSDate(timeIntervalSince1970: 1352149171) //sample date 
     store.saveObject(
      reservation, 
      withCompletionBlock: { (objectsOrNil: [AnyObject]!, errorOrNil: NSError!) -> Void in 
       if errorOrNil != nil { 
        //save failed 
        NSLog("Save failed, with error: %@", errorOrNil.localizedFailureReason!) 
       } else { 
        //save was successful 
        NSLog("Successfully saved event (id='%@').", (objectsOrNil[0] as! NSObject).kinveyObjectId()) 
       } 
      }, 
      withProgressBlock: nil 
     ) 
    } 

    class Booking : NSObject { //all NSObjects in Kinvey implicitly implement KCSPersistable 
     var entityId: String? //Kinvey entity _id 
     var name: NSString? 
     var email: NSString? 
     var seats: NSString? 
     var date: NSDate? 

    } 

    override func hostToKinveyPropertyMapping() -> [NSObject : AnyObject]! { 
     return [ 
      "entityId" : KCSEntityKeyId, //the required _id field 
      "name" : "name", 
      "email" : "email", 
      "seats" : "seats", 
      "date" : "date", 
     ] 
    } 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
    } 

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

Antwort

1

Wenn das tatsächlich der Code ist und nicht nur ein Fehler, den Sie gemacht, wenn Kopie-Einfügen, das Problem ist, dass Ihre Booking Klasse ist derzeit eine verschachtelte Klasse in Ihrem ReservationViewController, und Sie implementiert hostToKinveyPropertyMapping als Methode der ReservationViewController .

Stattdessen eine neue Datei für Ihre Kinvey Klasse erstellen:

class Booking: NSObject { 
    var entityId: String? //Kinvey entity _id 
    var name: NSString? 
    var email: NSString? 
    var seats: NSString? 
    var date: NSDate? 

    override func hostToKinveyPropertyMapping() -> [NSObject : AnyObject]! { 
     return [ 
      "entityId" : KCSEntityKeyId, //the required _id field 
      "name": "name", 
      "email": "email", 
      "seats": "seats", 
      "date": "date" //You also had an extra comma after the last item of this dictionary. 
     ] 
    } 
} 

Und dass Code aus Ihrer Sicht Controller löschen. Stellen Sie außerdem sicher, dass Sie alle optionalen Werte sicher entfernen, und bestätigen Sie, dass Ihre Sammlung wirklich "userReservation" heißt.

+0

Entschuldigung dafür, nicht früher zu antworten, ich war in den letzten 3 Wochen im Urlaub Ich werde dies testen, sobald ich diese Woche wiederkomme !, Ich bin immer noch ein wenig verwirrt, was Sie meinen, indem Sie eine neue Datei erstellen? – Kevin

+0

Kein Problem, ich habe nur Spaß gemacht! Ich meinte, Sie sollten Ihrem XCode-Projekt eine neue Swift-Datei hinzufügen und den Code für die Booking-Klasse dort einfügen, nur um ihn klar von Ihrem ReservationViewController zu trennen. Ich denke, dass sie zwei völlig getrennte Klassen sein sollten. – ConfusedByCode

+0

Wie rufe ich den Code auf, wenn er in einer neuen Klasse ist und nicht mit dem Reservierungsansicht-Controller verbunden ist? Es tut mir leid, irgendwie neu zu diesem ... – Kevin