2016-05-17 7 views
2

私のアプリで初めてAlamofireObjectMapperを使用しています。 私は1つのクラスのAPI応答データをマッピングしているので、そのデータを使用したいと思います。 だからここで私は他のMappbleクラスオブジェクトの値にアクセスするにはどうすればよいですか(Alamofire Object Mapper)

extension OrderListViewController 
{ 
func get_order_list() 
    { 


     let url = "\(OrderURL)get_New_order_byPharmacy" 
     let param : [String : AnyObject] = [ 

      "pharmacyId" : "131" 
     ] 

     Alamofire.request(.GET, url, parameters: param, encoding: .URL).responseObject { (response:Response<OrderList, NSError>) in 
      let OrderList = response.result.value 
      print(OrderList!.Message) 
     } 

    } 
} 

をオブジェクトにマッピングする方法というのが私のコードであり、ここで私は今、私のOrderListViewControllerに私は私が使用することができますどのようにこのデータを使用したい私のデータ

class OrderList: Mappable { 
    var Message : String! 
    var Status : Int! 
    var result:[OrderResult]? 



    required init?(_ map: Map){ 

    } 

    func mapping(map: Map) { 
     Message <- map["Message"] 
     Status <- map["Status"] 
     result <- map["Result"] 

    } 

} 

を保存するクラスです。この??

class OrderListViewController: UIViewController,UITableViewDataSource,UITableViewDelegate { 

    @IBOutlet weak var table_OrderList: UITableView! 


    override func viewDidLoad() { 
     slideMenuController()?.addLeftBarButtonWithImage(UIImage(named: "ic_menu_black_24dp")!) 
     slideMenuController()?.addRightBarButtonWithImage(UIImage(named: "ic_notifications_black_24dp")!) 
     get_order_list() 
    } 


    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     let cell : OrderList_Cell = tableView.dequeueReusableCellWithIdentifier("OrderList_Cell") as! OrderList_Cell 



     return cell 

    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 20 

    } 
} 

たとえば、私はテーブルビューのセルラベルにメッセージ値を出力したいと思います。だから私はどのようにOrderListからその値を得ることができますか?

おかげでスラヴァは私にいくつかの解決策を与えました。私のjsonの応答は私に配列を与える。では、どうすればそれを管理できますか?私はnumberofrowinSetCionに戻りたいので、配列の数ですので、どうすればいいのですか?更新された質問をご覧ください。

ここに私のapiの応答です。

{ 
    "Status": 1, 
    "Message": "records are available", 
    "Result": [ 
     { 
      "id": 30162, 
      "status_id": 2, 
      "status_type": "New Order", 
      "created_date": "2016-05-11T10:45:00.6779848", 
      "created": "11 May 2016" 
     }, 
     { 
      "id": 30170, 
      "status_id": 2, 
      "status_type": "New Order", 
      "created_date": "2016-05-12T07:01:00.6968385", 
      "created": "12 May 2016" 
     }, 
     { 
      "id": 30171, 
      "status_id": 2, 
      "status_type": "New Order", 
      "created_date": "2016-05-12T09:12:53.5538349", 
      "created": "12 May 2016" 
     }, 
     { 
      "id": 30172, 
      "status_id": 2, 
      "status_type": "New Order", 
      "created_date": "2016-05-12T09:46:09.4329398", 
      "created": "12 May 2016" 
     }, 
     { 
      "id": 30173, 
      "status_id": 2, 
      "status_type": "New Order", 
      "created_date": "2016-05-12T11:26:58.3211678", 
      "created": "12 May 2016" 
     }, 
     { 
      "id": 30178, 
      "status_id": 2, 
      "status_type": "New Order", 
      "created_date": "2016-05-16T07:34:19.9128517", 
      "created": "16 May 2016" 
     } 
    ] 
} 
+0

注意:コードスタイルについては、ローカル変数の名前を下位文字(大文字ではない)から始めるのが一般的です。だから私の助言は、 'var Message:String!'の代わりに 'var message:String!'を使うことです。最終的にはどのスタイルを使うのかはあなた次第です。 – slava

答えて

1

あなたは、テーブルを埋めるために使用されるすべての受信した情報を保存するために、コントローラ内のローカル変数を必要としています。そのようなものは、次のようにする必要があります。

class OrderListViewController: ... { 
    private var orderList: OrderList? // <- the local variable needed 
    ... 
} 

extension OrderListViewController { 
    func get_order_list() { 
     ... 
     Alamofire 
      .request(...) 
      .responseObject { (response:Response<OrderList, NSError>) in 
       switch response.result { 
       case .Success(let value): 
        self.orderList = value // <- fill the local variable with the loaded data 
        self.tableView.reloadData() 
       case .Failure(let error): 
        // handle error 
       } 
      } 
    } 
    ... 
} 

extension OrderListViewController: UITableViewDataSource { 
    ... 
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell : OrderList_Cell = tableView.dequeueReusableCellWithIdentifier("OrderList_Cell") as! OrderList_Cell 
     // I assume 'OrderList_Cell' class has outlet for status type named 'statusTypeLabel' and OrderResult.statusType is of type String 
     if let orderList = orderList, orderResults = orderList.result { 
      cell.statusTypeLabel.text = orderResults[indexPath.row].statusType // <- use of the locally stored data 
     } 

     return cell 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     if let orderList = orderList, orderResults = orderList.result { 
      return orderResults.count 
     } else { 
      return 0 
     } 
    } 
} 

注:JSONの単一オブジェクトをバックエンドから受け取る場合は、コードが正しいはずです。 バックエンドがオブジェクトの配列を送信する場合、配列を使用してローカルデータ(private var listOfOrderLists: [OrderList])を格納し、代わりにAlamofire.request(...).responseArray(...)を使用する必要があります。しかし、ローカル変数についてのアイデアはまだ同じです。

+0

スラヴに感謝します。私のjsonの応答は私に配列を与える。では、どうすればそれを管理できますか?私はnumberofrowinSetCionに戻りたいので、配列の数ですので、どうすればいいのですか?更新された質問をご覧ください。 –

+0

私は答えのコードを更新しました、助けてくれることを願って – slava

+0

くそー!完璧な男は、その作業はかなりよく、さらには私のすべての疑いを明確にします。感謝の男は本当に役立ちます。私はupvoteと右のようにマーキングするつもりです。他の人も助けを得ることができます。 –

0
typealias FailureHandler = (error: AnyObject) -> Void 
typealias SuccessHandler = (result: AnyObject) -> Void 
class WebServiceManager: NSObject { 

    class func getDataFromService(mehodName:String,success:(result:AnyObject)->(), apiError:(FailureHandler)) 
    { 
     let url = "\(OrderURL)get_New_order_byPharmacy" 
     let param : [String : AnyObject] = [ 

      "pharmacyId" : "131" 
     ] 

     alamoFireManager!.request(.GET, url) 
      .responseJSON { response in 
      print(response.response!) 
       print(response.result) 
       CommonFunctions.sharedInstance.deactivateLoader() 
       switch response.result { 
       case .Success(let JSON): 
        print("Success with JSON: \(JSON)") 

        guard let _ = JSON as? NSMutableArray else { 
         apiError(error: "") 
         return 
        } 
        let listOfItem:NSMutableArray = NSMutableArray() 

        for (_, element) in adsArray.enumerate() { 
         let adsItem = Mapper<OrderList>().map(element) 
        listOfItem.addObject(adsItem!) 
        } 


        success(result:listOfItem) 



       case .Failure(let data): 
        print(data) 






       } 



     } 

} 


class OrderListViewController: UIViewController,UITableViewDataSource,UITableViewDelegate { 

    @IBOutlet weak var table_OrderList: UITableView! 
    var listOFOrder:NSMutableArray =[] 

    override func viewDidLoad() { 
     slideMenuController()?.addLeftBarButtonWithImage(UIImage(named: "ic_menu_black_24dp")!) 
     slideMenuController()?.addRightBarButtonWithImage(UIImage(named: "ic_notifications_black_24dp")!) 
WebServiceManager.getDataFromService("", success: { (result) in 
      listOFOrder = result as NSMutableArray 
      self.recordTable?.reloadData() 
      }) { (error) in 

     } 




    } 


    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     let cell : OrderList_Cell = tableView.dequeueReusableCellWithIdentifier("OrderList_Cell") as! OrderList_Cell 



     return cell 

    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return listOFOrder.count 

    } 
} 
関連する問題