2016-04-12 17 views
0

Verilerim neden Kinvey arka ucuna gönderilmiyor? Uygulamam kilitleniyor ve SIGABRT hatasını aldım. String'u NSString olarak değiştirmeyi denedim ancak bu yardımcı olmadı. Bazı nedenlerden dolayı, Kinvey'deki kontrol panelim API Çağrılarını ve Veri depolama alanını gösteriyor ancak hiçbir şey kaydetmiyor (yeni başlayan biri benim).SIGABRT Verileri Kinvey'e Gönderirken Hata

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

cevap

1

aslında kod ve sen değil aşağıya ekliyoruz, sorun Booking sınıf iç içe geçmiş bir sınıf sizin ReservationViewController şu anda o zamanın geldiğini söylenmiş bir hataysa ve ReservationViewController yöntemi olarak hostToKinveyPropertyMapping uygulanan .

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

Ve görünümü denetleyicisinden bu kodu silin:

Bunun yerine, Kinvey sınıf için yeni bir dosya oluşturun. Ayrıca, tüm isteğe bağlı değerleri güvenle paketlediğinizden emin olun ve koleksiyonunuzun gerçekten "userReservation" adlı olduğunu doğrulayın.

+0

Geçtiğimiz günlerde 3 gün boyunca tatile çıkmadığım için üzgünüz, bu hafta geri geldiğim anda bunu test edeceğim !, Yeni bir dosya oluşturarak ne demek istediğimi biraz karıştırıyorum. – Kevin

+0

Sorun değil, sadece şaka yapıyordum! Ben, XCode projenize yeni bir Swift dosyası eklemeniz ve sadece ReservationViewController'ınızdan açıkça ayırmak için oradaki rezervasyon sınıfının kodunu koymanız gerektiğini kastediyorum. Bence tamamen ayrı iki sınıf olmalılar. – ConfusedByCode

+0

Yeni bir sınıftaysa ve rezervasyon görüntüleme denetleyicisine bağlı değilse kodu nasıl arayabilirim? Bu konuda üzgünüm ... – Kevin