2013-10-15 4 views
10

Я разрабатываю приложение для iPhone, и мне нужно показать сохраненные данные в TableView. После некоторых исследований я решил, что JSON лучше всего подходит для хранения данных. Тем не менее, я не смог найти учебники, объясняющие, как читать JSON в качестве локального файла, а не из удаленного источника, как это часто бывает.Как загрузить данные в ViewController из локального файла JSON

Любые учебники, которые вы могли бы порекомендовать?

+0

Когда вы говорите _local file_, вы говорите, что файл JSON хранится в каталоге Documents или внедрен в качестве ресурса в комплекте приложения? – neilco

+0

Кстати, в то время как JSON - это прекрасный формат (esp для обмена данными с сервером), если это только локальный ресурс, [список свойств] (https://developer.apple.com/library/ios/documentation /Cocoa/Conceptual/PropertyLists/Introduction/Introduction.html#//apple_ref/doc/uid/10000048-CJBGDEGD) (он же «файл plist») может быть проще. Вы создаете файл списка свойств с помощью '[dictionary writeToFile: path atomically: YES];'. Вы читаете plist с словарем NSDictionary * = [Словарь NSDictionaryWithContentsOfFile: путь]; '. Это менее громоздко, чем использование JSON. – Rob

ответ

14

Для этого вы можете использовать NSJSONSerialization.

NSError *deserializingError; 
NSURL *localFileURL = [NSURL fileURLWithPath:pathStringToLocalFile]; 
NSData *contentOfLocalFile = [NSData dataWithContentsOfURL:localFileURL]; 
id object = [NSJSONSerialization JSONObjectWithData:contentOfLocalFile 
              options:opts 
               error:&deserializingError]; 
+0

'NSURL' не имеет метода с именем' urlWithString'. Если вы хотите создать «NSURL» из пути к файлу, вам нужно использовать 'NSURL fileURLWithPath:'. – rmaddy

+0

Извините, заглавная информация была неправильной, она должна быть 'URLWithString'. Но вы правы 'fileURLWithPath:' это путь для путей к файлам – matehat

+4

Я использовал: 'NSString * jsonPath = [[NSBundle mainBundle] pathForResource: @" employees "ofType: @" json "]; NSData * data = [NSData dataWithContentsOfFile: jsonPath]; NSError * error = nil; id json = [NSJSONSerialization JSONObjectWithData: data options: kNilOptions error: & error]; ' – es1

22

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

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"THENAMEOFTHEFILE" ofType:@"EXTENSIONOFYOUTFILE"]; 

секунду, загрузить данные файла:

NSData *content = [[NSData alloc] initWithContentsOfFile:filePath]; 

треть, анализировать данные:

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:content options:kNilOptions error:nil]; 
Смежные вопросы