2016-06-25 9 views
0

Alamofireにパラメータを送信する際に問題が発生しています。これは、サーバーが期待するJSONです:Swift AlamofireのJSON書き込みに無効なタイプがあります

ユーザーが配列である
let parameters = [“users” : users] 
return sendRequest(.PUT, url: “example.com", parameters: parameters) 

{ 
“users”:[{“_id”:”1234567”}, {“_id”:”665543”}] 
} 

、私のスウィフトコードでは、これは私が上記の目的を構築しようとしている方法です。ここでは(私は簡単にするために、他の継承の一部を取り出している)されているもののユーザーの詳細は以下のとおりです。

class User : MyBase, CustomStringConvertible { 
    var name: String 

    var description : String { 
    get{ 
      return ["_id" : self._id!].description 
    } 
} 
} 

class MyBase { 
    var _id: String? 
} 

私はdebugPrint(users)を行う場合は、これは私が得るものです:

[“users”: [["_id": "1234567"], ["_id": "665543"]]] 

そしてここでのAlamofireものないのsendRequest方法:

static func sendRequest(method: Alamofire.Method, url: String, parameters: [String: AnyObject]?) { 
     Alamofire.request(method, url, parameters: parameters as! [String: [User]], encoding: .JSON) 
      .validate() 
      .responseObject { (response: Response<User, NSError>) in 
       switch response.result { 
       case .Success(let value): 
        // do something 
       case .Failure(let error): 
        // do something else 
       } 
     } 
    } 

そして、それはAlamofire.requestラインにスローエラーがこれです

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (MyApp.User)’ 

最終的には、私はユーザオブジェクトの配列ですが、これを上記のJSON形式でサーバーに送信する必要があります。スウィフトに新しいことは、私はこれを理解しようと苦労しているので、どんな助けもありがたいです。

答えて

1

あなたのdebugPrint(ユーザー)に問題があるようです。サーバーに送信するのは、オプションのタイプです。あなたは文字列を送る必要があります

ここで、self._idをself._idに変更してください!

+0

私はそれを行い、debugPrintはこれを次のようにします:["users":[["_id": "1234567"]、["_id": "665543"]]]。しかし、残念ながら、私はまだ同じエラーが発生します。 – Prabhu

+0

あなたの提案で質問を更新しました。 – Prabhu

+0

さて、あなたは配列を送信しているので、JSONの書き込みで無効な型があると言っているので、JSONを期待している可能性があります。 let json_data = NSJSONSerialization.dataWithJSONObject(ユーザー、オプション:なし、エラー:なし) ? – Eyesofbanquo

関連する問題