Файл Json имеет значение NULL, когда печатает в ресурсе связки ios ionic target c - PullRequest
0 голосов
/ 09 июня 2018

Я использую ionic проект ios build app.xcproj в xcode.Я загружаю файлы json с сервера по следующему адресу: /var/mobile/Containers/Data/Application/63E66EE9-9A1B-4D4D-AEF6-F8C54D159ED0/Library/NoCloud/MyApp/Timing/DTS.json и я проверил, есть ли у меня файлы, напечатав:

NSURL *urlDTS = [NSURL fileURLWithPath: DTS_Path];
NSString *fileContentDTS = [NSString stringWithContentsOfURL:urlDTS encoding:NSUTF8StringEncoding error:nil];
NSLog(@"Json data is here of DTS  %@", fileContentDTS);

Это печатает весь файл нормально, после этого, когда я получаю путь к ресурсу для дальнейшегоопераций, которые он показывает null

NSString *filePathDTS = [[NSBundle mainBundle] pathForResource:getParameterDTSValueName ofType:@"json"];
NSLog(@"This is the dts path %@", filePathDTS);

Даже я нашел расположение файлов как /var/mobile/Containers/Data/Application/63E66EE9-9A1B-4D4D-AEF6-F8C54D159ED0/Documents/DTS.json

, следуя этой ссылке :

NSString *documentdir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *tileDirectory = [documentdir stringByAppendingPathComponent:@"xxxx/DTS"];
NSLog(@"Tile Directory: %@", tileDirectory);

Обновление

Вот что содержит файл: [{"value": 0}]

NSURL *libraryDirURL = [[NSFileManager.defaultManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] lastObject];
NSURL *urlDTSK = [libraryDirURL URLByAppendingPathComponent:@"NoCloud/MyApp/MyFolder/DTS.json"];
NSString *filePathDTS = [NSString stringWithContentsOfURL:urlDTSK encoding:NSUTF8StringEncoding error:nil];
NSLog(@"This is Dts PATH %@", filePathDTS);
NSData *dataDTS = [NSData dataWithContentsOfFile:filePathDTS];
NSLog(@"here is DTS data  %@", dataDTS); //this shows null
NSDictionary *jsonDTS = [NSJSONSerialization JSONObjectWithData:dataDTS options:kNilOptions error:nil];
NSLog(@"here is jason DTS %@", jsonDTS);
NSMutableArray *DTSvalue = [jsonDTS valueForKeyPath: @"Value"];
DTSValueIs = DTSvalue[0];
NSLog(@"here is DTS Value first%@", DTSvalue[0]);
NSLog(@"here is DTS value is%@", DTSValueIs);

Это показывает This is Dts contents [{"value":0}] 2018-06-11 17:04:40.940006+0500 Muslims 365[3356:819935] here is DTS data (null)

Скажите, пожалуйста, как мне получить данные из файла json, указав ресурс в основном комплекте ???как показывает ноль.

1 Ответ

0 голосов
/ 09 июня 2018

pathForResource - это правильный способ получить путь в вашем комплекте приложений.Обратите внимание, что это место только для чтения.Вы не можете скачать файл и сохранить его там.pathForResource обращается только к файлам, которые есть у вас во время компиляции, и возвращает nil - это означает, что файл не найден.Когда вы строите свой проект, он создает «комплект» - папку с именем «MyApp.app».В XCode вы можете увидеть его в группе «Продукты» слева, и вы можете щелкнуть правой кнопкой мыши и открыть его в Finder, затем щелкните правой кнопкой мыши - показать содержимое - чтобы увидеть, что внутри.Таким образом, вы можете визуализировать структуру вашего основного комплекта.Если ваш файл находится внутри подкаталога, вам необходимо использовать pathForResource: ofType: inDirectory: .

Папка «Library» внутри контейнера - это хорошее место для хранения данных времени выполнения.Например, файлы, которые вы загружаете.Это местоположение ЗАПИСАННОЕ, и оно пустое, когда вы запускаете приложение в первый раз.Если в вашем пакете есть файл, который необходимо изменить, вы можете скопировать его из пакета в «Библиотеку».Обратите внимание, что если вы загружаете некоторые файлы, которые можно будет повторно загрузить позже, лучше использовать «Кэши» (подпапка «Библиотеки»).Если вы пришли из мира Windows, идея «Библиотека» похожа на «AppData».

«Документы» - это место, предназначенное для файлов, которые видны пользователю, и которые могут редактироваться или управлятьсяпользователь.Это также доступно для записи.Вы можете думать об этом как о «Документах» в macOS или «Мои документы» в Windows, но только для определенного приложения.

Если ваш файл находится в «Библиотеке», позже вы можете получитьПуть к библиотеке и загрузить файл в виде строки примерно так:

NSURL *libraryDirURL = [[NSFileManager.defaultManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] lastObject];
NSURL *urlDTS = [libraryDirURL URLByAppendingPathComponent:@"NoCloud/MyApp/MyFolder/DTS.json"];
NSString *fileContentDTS = [NSString stringWithContentsOfURL:urlDTS encoding:NSUTF8StringEncoding error:nil];
...