2016-07-18 8 views
2

ユーレカフォームでカスタムオブジェクトを使用する際に問題があります。休憩サービスからオブジェクトをロードしようとしています.Alamofireを使用してオプションを取得しています。データを記入し、私は、セルを選択したときに、私は、エラーアサーションを取得する.options.appendに失敗しました:ここでは重複したタグビルPushRowとユーレカフォームのカスタムオブジェクト

はEquatable議定書に

class Building: Mappable, Equatable { 
    var name_building: String? 
    var id_building: Int? 

    required init?(){ 
    } 

    required init?(_ map: Map){ 
    } 

    func mapping(map: Map) { 
     id_building <- map["id_building"] 
     name_building <- map["name_building"] 
    } 
} 

func == (lhs: Building, rhs: Building) -> Bool { 
    return lhs.id_building == rhs.id_building 
} 

を準拠し、ここで私のクラスでありますフォーム

import UIKit 
import Eureka 
import CoreLocation 
import Alamofire 
import KeychainAccess 
import ObjectMapper 
import SnapKit 

class UserViewController: FormViewController { 


    override func viewDidLoad() { 
     super.viewDidLoad() 


     self.title = "Perfil del Usuario" 

     // Do any additional setup after loading the view. 
     form +++ Section("Datos Generales") 
      <<< NameFloatLabelRow("kName") { 
       $0.title = "Nombre" 
      } 
      <<< TextFloatLabelRow("kLastName") { 
       $0.title = "Apellidos" 
      } 
      <<< TextFloatLabelRow("kPhone") { 
       $0.title = "Teléfono" 
      } 
      <<< TextFloatLabelRow("kEmail") { 
       $0.title = "Email" 
       $0.disabled = true; 
      } 
      <<< SegmentedRow<String>("kGenre") { 
       $0.title = "Genero" 
       $0.options = ["Masculino", "Femenino"] 
      } 
      <<< CheckRow("kRider") { 
       $0.title = "¿Estoy dispuesto a dar Aventones?" 
       $0.value = true 
      } 

      +++ Section("Casa") 
      <<< LocationRow("kHome"){ 
       $0.title = "Casa" 
       $0.value = CLLocation(latitude: -34.91, longitude: -56.1646) 
      } 
      <<< TimeInlineRow("kHomeDepartureTime"){ 
       $0.title = "Hora de Salida" 
       $0.value = NSDate() 
      } 
      +++ Section("Trabajo") 
      <<< PushRow<Building>("kBuilding") { 
       $0.title = "Edificio" 
       $0.selectorTitle = "Donde Trabajas?" 
      } 
      <<< TimeInlineRow("kEnterTime"){ 
       $0.title = "Hora de Entrada" 
       $0.value = NSDate() 
      } 
      <<< TimeInlineRow("kExitTime"){ 
       $0.title = "Hora de Salida" 
       $0.value = NSDate() 
      } 
      +++ Section() 
      <<< ButtonRow() { (row: ButtonRow) -> Void in 
       row.title = "GUARDAR" 
       } .onCellSelection({ (cell, row) in 
        print("Salvando Informacion") 
        let nameRow: NameFloatLabelRow! = self.form.rowByTag("kName") 
        let lastNameRow: TextFloatLabelRow! = self.form.rowByTag("kLastName") 
        let phoneRow: TextFloatLabelRow! = self.form.rowByTag("kPhone") 
        let emailRow: TextFloatLabelRow! = self.form.rowByTag("kEmail") 
        let genreRow: SegmentedRow<String>! = self.form.rowByTag("kGenre") 
        let riderRow: CheckRow! = self.form.rowByTag("kRider") 
        let locationRow: LocationRow! = self.form.rowByTag("kHome") 
        let homeDepartureTimeRow: TimeInlineRow! = self.form.rowByTag("kHomeDepartureTime") 
        let buildingRow: PushRow<Building>! = self.form.rowByTag("kBuilding") 
        let buildingEnterTimeRow: TimeInlineRow! = self.form.rowByTag("kEnterTime") 
        let buildingExitTimeRow: TimeInlineRow! = self.form.rowByTag("kExitTime") 

        let user = User() 

        user.email = emailRow.value 
        user.name = nameRow.value 
        user.lastName = lastNameRow.value 
        user.genre = genreRow.value 
        user.phone = phoneRow.value 
        user.id_type = riderRow.value == true ? 1 : 2 
        user.homeDepartureDate = homeDepartureTimeRow.value 
        user.jobEnterTime = buildingEnterTimeRow.value 
        user.jobExitTime = buildingExitTimeRow.value 
        user.id_building = 3 

        let location = locationRow.value! as CLLocation 
        user.latitude = location.coordinate.latitude 
        user.longitude = location.coordinate.longitude 

        let JSONString = Mapper().toJSONString(user, prettyPrint: false) 
        let mappedObject = Mapper<User>().map(JSONString) 


        let request = "requesttoCreateUser" 

        Alamofire.request(.POST, request, parameters: Mapper().toJSON(user), encoding: .JSON) 
         .validate() 
         .responseJSON { response in 
          switch response.result { 
          case .Success: 
           print("Validation Successful") 
          case .Failure(let error): 
           print(error) 
          } 
        } 

       }) 

     self.getBuilding(); 

    } 

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

    func getBuilding(){ 
     let buildingRow: PushRow<Building>! = self.form.rowByTag("kBuilding") 

     let request = "requestToGetBuildings" 

     Alamofire.request(.GET, request).responseArray { (response: Response<[Building], NSError>) in 

      let buildingsArray = response.result.value 

      if let buildingsArray = buildingsArray { 
       for building in buildingsArray { 
        buildingRow.options.append(building) 
       } 
      } 
     } 
    } 

} 

それは

final func wasAddedToFormInSection(section: Section) { 
     self.section = section 
     if let t = tag { 
      assert(section.form?.rowsByTag[t] == nil, "Duplicate tag \(t)") 
      self.section?.form?.rowsByTag[t] = self 
      self.section?.form?.tagToValues[t] = baseValue as? AnyObject ?? NSNull() 
     } 
     addToRowObservers() 
     evaluateHidden() 
     evaluateDisabled() 
    } 
+0

このエラーは「Duplicate tag」と表示され、「kName」または「kLastName」または「kBuilding」という別のタグがあると、この名前のセルを追加しないかどうかを確認できますか? –

+0

Nop、私は重複タグを持っていない、私はすでに2回チェックしました – Angel

+0

あなたはすべてのあなたのviewControllerコードを投稿できますか? –

答えて

1

としてはhereを述べたBaseRow.swiftユーレカクラスでここにクラッシュします。

あなたのモデルはCustomStringConvertibleプロトコルに準拠している必要があります。 SelectorViewController のデフォルトの実装では、あなたのPushRow行のためのタグとして文字列(オプション)を使用しているため、

です

だからあなたのクラスには、次のようになります。通常

class Building: Mappable, Equatable,CustomStringConvertible { 
    var name_building: String? 
    var id_building: Int? 
    var description: String { 

     return name_building 
    } 
    required init?(){ 
    } 

    required init?(_ map: Map){ 
    } 

    func mapping(map: Map) { 
     id_building <- map["id_building"] 
     name_building <- map["name_building"] 
    } 
} 

func == (lhs: Building, rhs: Building) -> Bool { 
    return lhs.id_building == rhs.id_building 
} 
関連する問題