2016-04-12 7 views
0

なぜデータがKinveyバックエンドに送信されないのですか?私のアプリはクラッシュし続け、SIGABRTエラーが発生します。私はStringNSStringに変更しようとしましたが、それは役に立ちませんでした。何らかの理由で、Kinveyの私のダッシュボードにAPIコールとデータストレージが表示されますが、何も格納していません(私は初心者です)。Kinveyにデータを送信するとSIGABRTエラーが発生する

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. 
    } 
} 

答えて

1

それは実際にあなたのコードではなく、あなたがコピー&ペースト製の単なる間違いであれば、問題はあなたのBookingクラスがあなたのReservationViewController現在のネストされたクラスであるということです、そしてあなたがReservationViewControllerの方法としてhostToKinveyPropertyMappingを実装。

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. 
     ] 
    } 
} 

をそして、あなたのビューコントローラからそのコードを削除します。

代わりに、あなたのKinveyクラスの新しいファイルを作成します。また、すべてのオプション値を安全にアンラップし、コレクションの名前が "userReservation"であることを確認してください。

+0

私は過去3週間休暇中でした。私は今週戻ってすぐにこれをテストします!私はまだ新しいファイルを作成することによって少し混乱していますか? – Kevin

+0

問題はない、私はちょうど冗談を言っていた!私はあなたのXcodeプロジェクトに新しいSwiftファイルを追加し、予約クラスのコードをReservationViewControllerとはっきりと区別する必要があることを意味しました。私は彼らが2つの完全に別々のクラスであるべきだと思います。 – ConfusedByCode

+0

新しいクラスにあり、予約ビューコントローラに接続されていない場合、コードを呼び出すにはどうすればよいですか?私はこれに少し新しく申し訳ありません... – Kevin

関連する問題