iOS平台读取指定文档目录下PLIST文件及内部数组的问题求助
修复方案
核心问题
- 现有代码仅将plist文件路径存入数组,未执行读取plist内容的逻辑
- 读取返回空、打印数组仅显示
(的常见诱因:未过滤目录下的非plist文件、plist格式错误、读取方法使用不当
可直接运行的实现代码
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = paths.firstObject; NSString *devotionalsDir = [documentsDirectory stringByAppendingPathComponent:@"devotionals"]; NSFileManager *fm = [NSFileManager defaultManager]; BOOL isDir = NO; // 校验目标目录是否存在,不存在则创建 if (![fm fileExistsAtPath:devotionalsDir isDirectory:&isDir] || !isDir) { NSError *createError = nil; [fm createDirectoryAtPath:devotionalsDir withIntermediateDirectories:YES attributes:nil error:&createError]; if (createError) { NSLog(@"创建目录失败:%@", createError.localizedDescription); return; } } NSError *dirError = nil; NSArray *allFiles = [fm contentsOfDirectoryAtPath:devotionalsDir error:&dirError]; if (dirError) { NSLog(@"读取目录失败:%@", dirError.localizedDescription); return; } // 结果数组每个元素为字典,存储文件名和对应字符串数组 NSMutableArray *resultArray = [NSMutableArray arrayWithCapacity:allFiles.count]; for (NSString *fileName in allFiles) { // 过滤非plist文件,避免隐藏文件(如.DS_Store)干扰 if (![fileName.pathExtension.lowercaseString isEqualToString:@"plist"]) { continue; } NSString *fullFilePath = [devotionalsDir stringByAppendingPathComponent:fileName]; // 读取plist内的数组内容 NSArray *contentArray = [NSArray arrayWithContentsOfFile:fullFilePath]; if (!contentArray) { NSLog(@"文件%@解析失败,请检查plist格式是否正确", fileName); continue; } // 提取不带后缀的文件名 NSString *pureFileName = [fileName stringByDeletingPathExtension]; NSDictionary *fileInfo = @{ @"fileName": pureFileName, @"content": contentArray }; [resultArray addObject:fileInfo]; } // 循环结束后统一打印完整结果 NSLog(@"所有文件读取结果:%@", resultArray); self.Array = resultArray;
异常排查
- 若plist解析返回nil:将plist文件拖入Xcode,确认可以正常打开、无语法错误
- 若打印数组仅显示
(:Xcode控制台打印数组时会换行输出,首行仅显示左括号,下拉控制台即可看到完整元素内容 - 若路径报错:打印
devotionalsDir的实际路径,确认沙盒中该目录确实存在对应plist文件
内容的提问来源于stack exchange,提问作者user717452
相关产品推荐
相关产品推荐

