在捆绑资源ios离子物镜c中打印时,Json文件为空



我正在xcode运行一个ionic项目的ios构建app.xcproj。 我正在从以下位置的服务器下载 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);

更新

这是文件包含的内容:[{"值":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];

最新更新