我正在尝试将csv文件的内容检索到NSString。多数民众赞成在做什么:
NSString *strBundle = [[NSBundle mainBundle] pathForResource:@"socs" ofType:@"csv"];
NSLog(@"bundle path: %@",strBundle);
NSString *file = [NSString stringWithContentsOfFile:strBundle
encoding:NSUTF8StringEncoding
error:nil];
if ([[NSFileManager defaultManager]fileExistsAtPath:strBundle]) {
NSLog(@"file is there!!!");
}else {
NSLog(@"no file");
}
NSLog(@"file: %@",file);
NSArray *allLines = [file componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
NSLog(@"lines: %lu",(unsigned long)[allLines count]);
文件管理器显示文件在那里。当我尝试记录NSString或文件数时,它表示null。我甚至创建了具有完全相同文件内容的NSData对象,当我记录NSData对象时,我清楚地看到有一些数据。然后,当我尝试使用NSData的内容创建NSString时,我得到了与之前相同的结果 - null。也许问题出在文件格式化的某个地方?
任何帮助将不胜感激:)
答案 0 :(得分:2)
我看到3个问题:
您正在将nil
参数传递到error:
行中的stringWithContentsOfFile:
参数。如果有可能出现问题(显然有问题),你应该在那里通过一个真正的论证,这样你就可以弄清楚出了什么问题。
您可以使用componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]
,但这种趋势会在每一行之间产生空白的“组件”。在我碰到的几乎所有情况下,简单的旧@"\n"
效果更好。
在尝试将fileExistsAtPath
加载到NSString
NSData
如果您真的能够从路径创建NSString
对象,那么它并不一定意味着它是正确的数据。但是,如果您无法将其转换为{{1}},那么您需要检查编码参数。