Json 在捆绑资源中打印时文件为空 ios ionic objective c

Json file is null when prints in bundle resource ios ionic objective c

我是 运行 ionic 项目的 ios 构建 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

关注 this Link:

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 文件中检索数据???因为它显示为空。

pathForResource 是在您的应用程序包中获取路径的正确方法。请注意,此位置是只读的。您无法下载文件并将其保存在那里。 pathForResource 仅访问您在编译期间拥有的文件,并且 returns nil - 这意味着未找到文件。当您构建项目时,它会生成一个 "bundle" - 一个名为 "MyApp.app" 的文件夹。在Xcode中你可以在左边的"Products"组中看到它,你可以右键单击并在Finder中打开它,然后右键单击-显示内容-查看里面的内容。这样您就可以可视化主包的结构。如果您的文件位于那里的子目录中,则需要使用 pathForResource:ofType:inDirectory:.

容器内的

"Library"文件夹是存放运行时数据的好地方。例如,您下载的文件。这个位置是可写的,当你第一次启动应用程序时它是空的。如果您的包中有需要修改的文件,您可以将其从包中复制到 "Library"。注意,如果你下载了一些以后可以重新下载的文件,最好使用"Caches"("Library"的子文件夹)。如果你来自Windows世界,"Library"的想法类似于"AppData"。

"Documents" 是一个存放用户可见文件的位置,用户可以编辑或管理这些文件。它也是可写的。您可以将其视为 macOS 上的 "Documents",或 Windows 上的 "My Documents",但仅适用于特定应用程序。

如果您的文件在 "Library" 中,稍后您可以获取库的路径并将文件作为字符串加载,如下所示:

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];