如何使用arrayWithContentsOfFile格式化要读取的文本文件

时间:2010-06-10 05:41:43

标签: iphone text file nsarray

我有几个大单词列表,我在代码中将它们加载到适当位置,如下所示:

NSArray *dict3 = [[NSArray alloc] initWithObjects:@"abled",@"about",@"above",@"absurd",@"absurdity", ...

但现在实际上它实际上造成了一个奇怪的exc_bad_access错误,我知道它似乎难以置信但是由于某种原因它导致了它。 (相信我,我只花了一天的时间来调试这个垃圾)

无论如何,我希望从我的文件中获取这些庞大的代码行,但我不确定最佳方法是什么。我想我可以做一个plist,但我需要弄清楚如何自动化这个过程。

如果我可以使用我编译的文本文件,那么最简单的是如果有人知道如何格式化文本文件以便

myArray = [NSArray arrayWithContentsOfFile: @"myTextFile.txt"];

将被正确读入,作为数组中每个元素的一个单词,我们真的很感激。

5 个答案:

答案 0 :(得分:3)

myTextFile.txt应采用.plist格式,因此请使用XCode Plist编辑器创建它并用数据填充。

来自文档:

  

arrayWithContentsOfFile:

     
      
  • (ID)arrayWithContentsOfFile:(的NSString   *)aPath
  •   
     

创建并返回一个数组   包含文件的内容   由aPath指定。文件   由aPath标识必须包含   字符串表示由   writeToFile:atomically:方法。在   另外,数组表示   必须只包含属性列表   对象(NSString,NSData,NSArray或   NSDictionary对象)。

     

如果文件不能,则返回nil   打开或者如果文件的内容   无法解析为数组。

//Use

[array writeToFile:path atomically:YES];

//to write your array directly, or

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];

//or

NSString *error;
NSData *data = [NSPropertyListSerialization dataFromPropertyList:array format:NSPropertyListBinaryFormat_v1_0 errorDescription:&error];

//for simpler data (arrays of strings)

//to write from NSData instead

[data writeToFile:path atomically:YES]

答案 1 :(得分:3)

只是为了完成bShirley的回答,如果你想使用pList编辑器这样做:

  1. 在项目中创建一个新的plist文件。
  2. 确保在目标构建阶段设置中将其添加到您的捆绑包中。
  3. 向plist添加一个元素,右键单击它并选择type = array。
  4. 根据需要添加数组元素。
  5. 保存并在文本编辑器中编辑plist文件
  6. 删除<dict></dict><key> </key>行,以获取应以<array>...your elements...</array>
  7. 结尾的数据
  8. 通过以下方式加载代码: [[NSMutableArray alloc] initWithContentsOfFile:path][NSMutableArray arrayWithContentsofFile:path]。如果您使用它,请记得保留或自动释放第二个。
  9. 示例工作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>Every 10 Minutes</string>
            <string>Every 20 Minutes</string>
        </array>
    </plist>
    

    这适用于我在iPad2上使用iOS 5.01的Xcode 4.2

答案 2 :(得分:2)

查看NSArray的文档:

+ (id)arrayWithContentsOfFile:(NSString *)aPath

参数 一条路径 包含由writeToFile:atomically:方法生成的数组的字符串表示形式的文件的路径。

该文件必须由writeToFile:atomically:编写才能从中加载。

答案 3 :(得分:1)

我最后通过朋友代码搜索并找到了我的答案,实际上是一小段代码:

- (NSArray *) readFile:(NSString *) path {


NSString *file = [NSString stringWithContentsOfFile:path];

NSMutableArray *dict = [[NSMutableArray alloc] init];
NSCharacterSet *cs = [NSCharacterSet newlineCharacterSet];
NSScanner *scanner = [NSScanner scannerWithString:file];

NSString *line;
while(![scanner isAtEnd]) {
    if([scanner scanUpToCharactersFromSet:cs intoString:&line]) {
        NSString *copy = [NSString stringWithString:line];
        [dict addObject:copy];

    }
}
NSArray *newArray = [[NSArray alloc] initWithArray:dict];

return newArray;
}

答案 4 :(得分:1)

如果你在Xcode中创建一个plist(肯定是在4.1中),它将永远是一个Dictionary。如果要将其作为数组加载,可以手动编辑该文件(在TextEdit中打开它)并删除<dict> </dict>以及作为数组的单个条目的键。您现在可以在Xcode中重新打开它并像平常一样进行编辑。

Apple在这个上失败了!