CSV到NSString导致空的空对象

时间:2014-01-23 22:55:17

标签: ios objective-c csv

我正在尝试将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。也许问题出在文件格式化的某个地方?

任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:2)

我看到3个问题:

  1. 您正在将nil参数传递到error:行中的stringWithContentsOfFile:参数。如果有可能出现问题(显然有问题),你应该在那里通过一个真正的论证,这样你就可以弄清楚出了什么问题。

  2. 您可以使用componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet],但这种趋势会在每一行之间产生空白的“组件”。在我碰到的几乎所有情况下,简单的旧@"\n"效果更好。

  3. 在尝试将fileExistsAtPath加载到NSString

  4. 之前,您应该先检查NSData
  5. 如果您真的能够从路径创建NSString对象,那么它并不一定意味着它是正确的数据。但是,如果您无法将其转换为{{1}},那么您需要检查编码参数。