2016-01-13 2 views
0

У меня есть этот URL, который возвращает JSON. Я пишу JSON в Словаре следующим образом:NSDictionary вдруг становится NSArray

NSData* Data = [NSData dataWithContentsOfURL:url options:NSDataReadingUncached error:&error]; 
NSDictionary *schools = [NSJSONSerialization JSONObjectWithData:Data options:kNilOptions error:nil]; 

Тогда, я пишу, что словарь в файл:

NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"schools.plist"];  
[schools writeToFile:filePath atomically:YES]; 

Во время работы код, я проверить словарь, который появляется, чтобы содержать действительные объекты :

enter image description here

Однако, когда я проверить файл на диске, это выглядит как массив:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<array> 
    <dict> 
     <key>Id</key> 
     <string>ffefe0f7-23bf-471f-8e99-58ada0229921</string> 
     <key>Name</key> 

Ожидаемое поведение? Другие методы в моем коде полагаются на получение Словаря из этого файла.

+1

'NSLog (@ "Класс:% @", [[NSJSONSerialization JSONObjectWithData: Варианты данных: kNilOptions ошибка: ноль] Класс]) 'возвращает действительно NSDictionary? Может быть, ваш JSON на самом деле возвращает NSArray? Кроме того, проверьте, что «школы» не «перезаписаны» где-то – Larme

+0

Похоже, что 'JSONObjectWithData' возвращает' NSArray', содержащий 'NSDictionary'. – keithbhunter

+0

Смотрите мою добавленную иллюстрацию. Когда «школы» инициируются, похоже, нет проблем с данными json – Sjakelien

ответ

1

Просто потому, что вы объявляете переменную, которая типа NSDictionary не означает, что вызов JSONObjectWithData является действительно возвращающий NSDictionary.

Я предполагаю, что файл, который вы получаете с вашего сервера, действительно представляет собой массив, содержащий словарь. Попробуйте войти тип объекта, возвращаемого JSONObjectWithData, прежде чем сохранить его в файл:

NSDictionary *schools = [NSJSONSerialization JSONObjectWithData:Data 
    options:kNilOptions error:nil]; 
NSLog(@"schools class = %@", [schools class]); 
+0

school class = __NSCFArray. В самом деле. Есть ли простой способ превратить его в словарь? – Sjakelien

+0

@Sjakelien Почему вы хотите это сделать? – trojanfoe

+0

Что я вижу в ваших данных - это массив, содержащий один элемент, словарь. Просто выберите этот первый элемент. Это должен быть словарь, который вам нужен. –

Смежные вопросы