2013-02-03 163 views
0

對iOS開發和objective-c同時也是一個相當新的東西。我有以下方法:無鑰匙訪問NSMutableDictionary值?

-(NSMutableArray *)fetchDatabaseJSON{ 
    NSURL *url = [NSURL URLWithString:@"http://www.ios.com/ios/responseScript.php"]; 
    NSError *error = nil; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:NULL error:&error]; 
    //jsonArray = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; 
    //NSLog(@"Array: %@",[jsonArray objectAtIndex:0]); 
    jsonDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; 
    NSLog(@"Dictionary: %@", jsonDictionary); 
    return jsonArray; 
} 

現在的NSLog示出了該:

2013年2月3日19:15:37.081 TestConnection [24510:C07]字典:( Bannana, 蘋果 SomeCheese)

據我所知,無論是在字典裏面沒有鍵值。怎麼會這樣?我該如何解決它?我希望能夠擁有鍵盤來簡化字典上的操作。

問候,

回答

1

JSONObjectWithData可能會返回一個NSArray或NSDictionary中,這取決於你給它的JSON數據。如果你的JSON字符串是一個數組,你將擁有一個NSArray。如果你的JSON數據是一個字典,你將得到一個NSDictionary。

將您的JSON數據(您的data變量)轉換爲字符串並使用NSLog將其打印出來。要的NSData轉換成的NSString,使用這樣的:具有

NSString *myString = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding]; 

如果你把它打印出來,看到一個JSON數組,你根本就沒有一個字典裏。如果你可以改變服務器的代碼生成JSON,你可以改變這一點。

我還注意到了一件事情,你認爲返回的容器是可變的。如果我沒有弄錯,你需要在JSONObjectWithData的options參數中使用NSJSONReadingMutableContainers這樣的選項來獲取它。

最後一個建議,如果你想在代碼來檢查,如果你有一個NSArray(或NSDictionary中),使用類似:

if ([obj isKindOfClass:[NSArray class]]) {...}