Я запускаю сборку ios ionic проекта 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, предоставив ресурс в основном пакете ??? поскольку он показывает null.





pathForResource - это правильный способ получить путь внутри вашего пакета приложений. Обратите внимание, что это место ТОЛЬКО ДЛЯ ЧТЕНИЯ. Вы не можете скачать файл и сохранить его там. pathForResource обращается только к файлам, которые у вас есть во время компиляции, и возвращает nil - это означает, что файл не найден. Когда вы создаете свой проект, он создает «пакет» - папку с именем «MyApp.app». В Xcode вы можете увидеть его в группе «Продукты» слева, и вы можете щелкнуть правой кнопкой мыши и открыть это в Finder, затем щелкнуть правой кнопкой мыши - показать содержимое - чтобы увидеть, что внутри. Таким образом вы можете визуализировать структуру вашего основного пакета. Если ваш файл находится внутри подкаталога, вам нужно использовать pathForResource: ofType: inDirectory:.
Папка «Библиотека» внутри контейнера - хорошее место для хранения данных времени выполнения. Например, файлы, которые вы скачиваете. Это место ЗАПИСАНО и пусто при первом запуске приложения. Если в вашем пакете есть файл, который нужно изменить, вы можете скопировать его из комплекта в «Библиотеку». Обратите внимание, что если вы загружаете некоторые файлы, которые позже можно будет повторно загрузить, лучше использовать «Кеши» (подпапка «Библиотека»). Если вы из мира 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];
Убедитесь, что он находится внутри связки. Как это сделать, я описываю в первом абзаце - откройте MyApp.app и посмотрите, есть ли он там. Если нет - вам нужно пометить его как ресурс в Xcode. (Google: этап создания копий ресурсов)
Добавьте файл в проект, а затем перетащите его здесь
но я не могу добавить файлы, так как я загружаю, вы можете дать мне рабочий пример с кодом, пожалуйста
Вы не можете загрузить в бандл, ТОЛЬКО ЧИТАЙТЕ! Что ты пытаешься сделать?
Я загружаю четыре файла json, они загружаются здесь: / var / mobile / Containers / Data / Application / 63E66EE9-9A1B-4D4D-A EF6-F8C54D159ED0 / Lib rary / NoCloud / MyApp / MyFolder / DTS. json
Чтобы получить этот путь позже, вам нужно получить путь к «Библиотеке», а затем добавить к нему «NoCloud / MyApp / MyFolder / DTS.json».
так как я могу определить свой путь к пакету ??? например NSString * filePathDTS = [[NSBundle mainBundle] pathForResource: @ "DTS": @ "json"];
Забудьте о связке. Комплект! = Библиотека. Получите путь к библиотеке как это, а затем добавьте «NoCloud / MyApp / MyFolder / DTS.json».
после добавления он получает тот же путь, что и /var/mobile/Containers/Data/Application/EF9E024B-B2D4-41E7-9248-E56E1643B838/Library/NoCloud/MyApp/My_Folder/DTS.json
Конечно, если вы не переместили файл, он все равно должен находиться по тому же пути и быть доступен для чтения с помощью stringWithContentsOfURL.
дорогой, но когда я обрабатываю дальше, я имею в виду, когда я определяю в основном пути пакета имя файла, которое он дает null, как мне разрешить это
Вы не можете использовать «[NSBundle mainBundle] pathForResource» для чтения «Библиотеки». Вы используете pathForResource для чтения «пакета», и вы используете некоторые другие функции (например, stringWithContentsOfURL) для чтения внутри «библиотеки».
пожалуйста, помогите мне, как мне заменить эту строку NSString *filePathDTS = [[NSBundle mainBundle] pathForResource:DTSValuePathOkName ofType:@"json"];, эта строка дает мне значение null, как я могу заменить ее как pathForResource
он работает до тех пор, пока содержимое не покажет null, как я уже упоминал подробно, см. обновление вопроса в последнем разделе
stringWithContentsOfURL уже дает вам содержимое, если вам нужен NSData, используйте [NSData dataWithContentsOfURL:urlDTSK]; вместо ваших строк 3-5
Итак, что мне делать, чтобы получить данные из json из основного пакета?