Czy poniższe stwierdzenie jest poprawne, czy też brakuje mi czegoś?obiekt zwrócony z NSJSONSerialization może się różnić
Trzeba sprawdzić obiekt powrotny NSJSONSerialization
aby sprawdzić, czy jest to słownik lub tablicę - można mieć
data = {"name":"joe", "age":"young"}
// NSJSONSerialization returns a dictionary
i
data = {{"name":"joe", "age":"young"},
{"name":"fred", "age":"not so young"}}
// returns an array
Każdy typ ma innej metody dostępu, który łamie się, jeśli zostanie użyte na niewłaściwym. Na przykład:
NSMutableArray *jsonObject = [json objectAtIndex:i];
// will break if json is a dictionary
więc trzeba zrobić coś takiego -
id jsonObjects = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers error:&error];
if ([jsonObjects isKindOfClass:[NSArray class]])
NSLog(@"yes we got an Array"); // cycle thru the array elements
else if ([jsonObjects isKindOfClass:[NSDictionary class]])
NSLog(@"yes we got an dictionary"); // cycle thru the dictionary elements
else
NSLog(@"neither array nor dictionary!");
miałem dobre spojrzenie thru przepełnienia stosu i dokumentacji firmy Apple i innych miejscach i nie mógł znaleźć żadnego bezpośredniego potwierdzenia powyższego .
Nie wspomniałeś o problemie z kodem. –
Problem polega na tym, że jeśli odzyskasz słownik i użyjesz metody tablicy, aby uzyskać do niego dostęp, zostanie zgłoszony wyjątek. Myślę, że musisz sprawdzić typ obiektu zwracanego, aby to naprawić, ale chciałbyś potwierdzić, że jest to właściwy sposób. – user1705452