JSONデータの取得にNSJSONSerializationを使用しようとしていますが、NSDictionaryを正しく解析できないという問題があります。NSDictionaryを使用したNSJSONSerializationデータへのアクセス
[{ "ステータス": "いいえ変数"}]
私のコードは次のようになります
...
NSURL * url = [NSURL URLWithString:@"http://justforexamplepurposes.xyz/file.php"];
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:[[NSString stringWithFormat:@"username=%@&password=%@", username, password] dataUsingEncoding:NSUTF8StringEncoding]];
NSURLResponse * response = nil;
NSError * error = nil;
NSData * result = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if(error == nil && result != nil)
{
NSError * json_error = nil;
id id_json_serialization = [NSJSONSerialization JSONObjectWithData:result options:NSJSONReadingMutableContainers error:&json_error];
if(json_error == nil)
{
NSDictionary * dictionary_result = (NSDictionary *) id_json_serialization;
NSLog(@"|>%@<|", dictionary_result);
NSEnumerator * enume;
id key;
enume = [dictionary_result keyEnumerator];
while((key =[enume nextObject]))
{
NSLog(@"%@ : %@", key, [dictionary_result objectForKey:key]);
}
}
}
...
最初のNSLogを
Webサービスは、以下を返しません
|>( { ステータス= "変数なし"; })< |
が、第2のNSLogで、それは例外をスロー:
2012-03-17 13:57:22.195でTestApp [41072:F803は] - [__ NSArrayM keyEnumerator]:未認識セレクタに送られますインスタンス0x689a9f0 2012-03-17 13:57:22.196でTestApp [41072:F803] *終了アプリによる キャッチされない例外 'NSInvalidArgumentException'、理由: ' - [__ NSArrayM keyEnumerator]:未認識セレクタインスタンス0x689a9f0に送ら' *ファーストスローコールスタック:(0x13e9022 0x157 acd6 0x13eacbd 0x134fed0 0x134fcb2 0x2a80 0x13eae99 0x3614e 0x360e6 0xdcade 0xdcfa7 0xdc266 0x5b3c0 0x5b5e6 0x41dc4 0x35634 0x12d3ef5 0x13bd195 0x1321ff2 0x13208da 0x131fd84 0x131fc9b 0x12d27d8 0x12d288a 0x33626 0x232d 0x2295)lldb)
任意の提案(例外をスロー呼ばTERMINATE?
CFShow(dictionary_result)を正しく使用するには、試してみるとObjective-Cのポインタ型 'NSDictionary *'をCのポインタ型 'CFTypeRef'に暗黙的に変換する(別名const void * )はブリッジキャストが必要です " – JohnnyAce
申し訳ありません。あなたは' CFShow((__ bridgeed CFTypeRef)dictionary_result) 'をしなければならないかもしれません。 – joerick
上記のコメントは 'CFShow((__ bridge CFTypeRef)dictionary_result)'でなければなりません。 – geerlingguy