使用文件中的数据填充NSArray

时间:2013-01-26 23:34:28

标签: ios objective-c nsarray

我被困住了!我无法让它发挥作用。

这是我打算做的: 我在.txt文件中有一些数据,我最终想用NSArray填充! 这就是我所做的:

NSString *urlString = [[NSBundle mainBundle] pathForResource:@"intsAndsStrings" ofType:@"txt"];
NSArray *objectsArray = [[NSArray alloc]initWithContentsOfFile:urlString];
NSLog(@"objectsArray is: %@", objectsArray);

我从最后一行得到的唯一输出是

    objectsArray is: (null)

txtFile中的对象用逗号(,)分隔。

请帮助我!

4 个答案:

答案 0 :(得分:5)

您发布的代码要求该文件为plist类型文件,其array为根元素。如果您的txt文件只是一个普通的旧文本文件,并且您希望将每行文本放入数组中,那么您需要采用完全不同的方法。

一种选择是将文本文件加载到NSString变量中,然后使用componentsSeparatedByCharactersInSet:传递newlineCharacterSet将字符串拆分为数组。

NSString *urlString = [[NSBundle mainBundle] pathForResource:@"intsAndsStrings" ofType:@"txt"];
NSString *rawText = [NSString stringWithContentsOfFile:urlString encoding:NSUTF8StringEncoding error:nil];
NSArray *objectsArray = [rawText componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];

真实代码将正确处理错误。

编辑:我刚注意到您声明文本文件是CSV文件。这需要更多的处理。 CSV文件是否有多行?如何存储每行的每个值?

答案 1 :(得分:2)

要使用initWithContentsOfFile:,您的文件必须采用属性列表格式,而不是逗号分隔格式。查看“属性列表编程指南”。

答案 2 :(得分:1)

正如我从您使用的扩展程序中看到的那样,这可能不是plist文件。

您应该使用包含数组的plist文件,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <string>hello</string>
</array>
</plist>

答案 3 :(得分:1)

使用CHCSVParser。给它一个你的文件的路径,它会给你一大堆NSStrings。

NSString *path = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"csv"];

NSError *error = nil;
NSArray *rows = [NSArray arrayWithContentsOfCSVFile:path encoding:NSUTF8StringEncoding error:&error];
if (rows == nil) {
  //something went wrong; log the error and exit
  NSLog(@"error parsing file: %@", error);
  return;
}

此时,行是一个数组。行中的每个元素本身都是一个表示CSV文件中单行的数组。并且该数组的每个元素都是NSString。