更新: JSONlintを使用してサーバーから返された JSON 形式をテストしましたが、問題ありません。
JSON データを返す PHP スクリプトへの AFNetworking 呼び出しで、NSJSONSerialization で例外が発生します。ここで同じ問題に関する他の質問を見て、それらの解決策を試しましたが、まだエラーが発生しています。
次の行でクラッシュします。
NSError *e = nil;
NSMutableArray *jsonArray =
[NSJSONSerialization JSONObjectWithData: jsonData
options: NSJSONReadingMutableContainers
error: &e];
エラーログ:
2012-03-19 18:10:41.291 imageUploader[3538:207] *キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了します。理由: '-[__NSCFArray バイト]: 認識されないセレクターがインスタンス 0x6867430 に送信されました'
ブラウザからphpスクリプトを呼び出すと、JSONデータは次のようになります。
[{"ユーザー":"binky","パス":"binky-0a96f9aab5267c8.jpg","インデックス":"101"},{"ユーザー":"binky","パス":"binky-9cf844252c28553.jpg ","index":"102"},{"user":"binky","path":"binky-d6c749d25d33015.jpg","index":"103"}]
データの NSLog は次のようになります。
( { インデックス = 101; パス = "binky-0a96f9aab5267c8.jpg"; ユーザー = binky; }, { インデックス = 102; パス = "binky-9cf844252c28553.jpg"; ユーザー = binky; }, { インデックス = 103; パス = "binky-d6c749d25d33015.jpg"; ユーザー = binky; } )
最後に、有効な JSON データがあることを確認するテストを行います。
if ([NSJSONSerialization isValidJSONObject: jsonData]){
NSLog(@"Good JSON \n");
}
そのため、エラーの原因がどこにあるのかわかりません。少し助けて?
// AFNetworking 操作 + ブロック
AFJSONRequestOperation *operation =
[AFJSONRequestOperation JSONRequestOperationWithRequest:myRequest
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id jsonData) {
NSLog(@"Success JSON data:\n %@ \n", jsonData); //log data
if ([NSJSONSerialization isValidJSONObject: jsonData]){
NSLog(@"Good JSON \n");
}
NSError *e = nil;
NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData: jsonData options: NSJSONReadingMutableContainers error: &e];
if (!jsonArray) {
NSLog(@"Error parsing JSON: %@", e);
} else {
for(NSDictionary *item in jsonArray) {
NSLog(@"Item: %@", item);
}
}
[self.navigationController popToRootViewControllerAnimated:YES];
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
NSLog(@"Error: %@", error);
[self.navigationController popToRootViewControllerAnimated:YES];
}];