我有几个大单词列表,我在代码中将它们加载到适当位置,如下所示:
NSArray *dict3 = [[NSArray alloc] initWithObjects:@"abled",@"about",@"above",@"absurd",@"absurdity", ...
但现在实际上它实际上造成了一个奇怪的exc_bad_access错误,我知道它似乎难以置信但是由于某种原因它导致了它。 (相信我,我只花了一天的时间来调试这个垃圾)
无论如何,我希望从我的文件中获取这些庞大的代码行,但我不确定最佳方法是什么。我想我可以做一个plist,但我需要弄清楚如何自动化这个过程。
如果我可以使用我编译的文本文件,那么最简单的是如果有人知道如何格式化文本文件以便
myArray = [NSArray arrayWithContentsOfFile: @"myTextFile.txt"];
将被正确读入,作为数组中每个元素的一个单词,我们真的很感激。
答案 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编辑器这样做:
<dict>
,</dict>
和<key> </key>
行,以获取应以<array>...your elements...</array>
[[NSMutableArray alloc] initWithContentsOfFile:path]
或[NSMutableArray arrayWithContentsofFile:path]
。如果您使用它,请记得保留或自动释放第二个。<?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在这个上失败了!