NSURLConnectionを使用してJSONリクエストを行うと、「認識されないセレクター」エラー[__NSCFDictionarylength]が発生します。
ヘッダー内のリクエストを、それが機能するUTF8Stringとして送信することから、何らかの理由でNSDataを必要とする本文に変更しました。最終的にヘッダーのデータが多すぎるため、この変更を行いました。
なぜこのエラーが発生するのですか?どうすれば修正できますか?これはどういうわけかメモリ内のオブジェクトに問題がありますか?私は困惑しています。
-(void)initWebserviceWithJSONRequest:(NSData *)jsonRequest url:(NSURL *)url
{
//initialize the responseData property //
self.responseData = [[NSMutableData alloc] init];
NSError *error = nil;
NSMutableData *requestData = [[NSMutableData alloc] init];
requestData = [NSJSONSerialization JSONObjectWithData:jsonRequest options:NSJSONWritingPrettyPrinted error:&error];
// create the URL request that will be passed to the NSURLConnection class //
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60];
// set up the request values //
[request setHTTPMethod:@"POST"];
// line below included to show that there is a length available for requestData
int jsonLength = requestData.description.length;// This works because it's .description.length
[request setHTTPBody:requestData ];
// Make a connection //
self.connection = [NSURLConnection connectionWithRequest:request delegate:self];
}
このメソッドの呼び出しは次のようになります。
NSData *jsonData = [[NSData alloc] initWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];
[service createWebserviceWithJSONRequest:jsonData url:loginURL];
そして、これが私が本文で送信しているjsonです:
{
CURRENTDATETIME = "2012-11-16 18:11:26";
CURRENTUSERTOKEN = "";
REQUESTDATA = "{\"USERNAME\":\"testUserName\", \"PASSWORD\":\"TestPassword\", \"APPVERSION\":\"0.001.1\", \"CARRIER\":\"ATT\", \"DEVICENAME\":\"iPad Simulator\", \"DEVICETOKEN\":\"9A384B42-7766-55AE-B61D-0AAB74A4304B\", \"OSVERSION\":\"5.1\", \"LATITUDE\":10.72182, \"LONGITUDE\":-10.148127, \"ISWIFI\":\"true\", \"BATTERYLEVEL\":42.2, \"SCREENHEIGHT\":1024, \"SCREENWIDTH\":768, \"SCREENPPI\":132, \"SIGNALSTRENGTH\":4, \"APPPACKAGE\":1003}";
TRANSACTIONDATETIME = "2012-11-16 18:11:26";
TRANSACTIONUSERTOKEN = "";
}
注xcodeバージョン4.3.2(4E2002)を使用しています
そしてiOSシミュレータバージョン5.1(272.21)
Mac OSX10.7.5の場合