我有一种方法(下面的代码是一个简化的版本),该解析小文本文件:为什么这个奇怪的行为发生在这个代码中?目标c
- (void)parseFile:(NSString *)aFile
{
NSDate *date;
NSNumber *number;
NSString *desc;
NSString *txt = [NSString stringWithContentsOfFile:aFile encoding:NSUTF8StringEncoding error:nil];
for (NSString *line in [txt componentsSeparatedByString:@"\n"]) {
if ([linesubstring isEqual:@"mydate"]) {
date = [dateFormat dateFromString:strDate];
}
if ([linesubstring isEqual:@"mynumber"]) {
number = [numberFormat numberFromString:strValue];
}
if ([linesubstring isEqual:@"mydesc"]) {
desc = [line substringWithRange:NSMakeRange(0, 10)];
}
if (!date && !number && !desc) {
...do something...
}
}
}
的第一个问题是,date
变量填充有aFile
参数的内容。它只是假设它是正确的价值,当通过拳头if /检查。
那么为什么?我虽然date
可能是一个保留字并交换它,但具有相同的行为。
第二个问题是最后一个if(与嵌套的)。调试运行的代码,我可以看到,Xcode中显示为“超出范围”,但!number
失败(Xcode认为它是有效的)...
我试过其他的组合,像[number isNotEqualTo:[NSNull null]]
(此抛出了一个错误EXC_BAD_ACCESS) , 没有成功。
请问,有人可以提供一些提示吗?我是可可/ objective-c的新手。我从Java来了...
TIA,
鲍勃
似乎有一些关键代码在这里丢失。 lineubstring,strDate和strValue在哪里定义,它们是什么?另外,为了比较你使用'[myString isEqualToString:otherString]'而不是'isEqual'的字符串。我不明白你实际上想要用代码做什么。你是否试图从你的文件中将一行文本的内容设置为适当的变量类型?文本文件中实际上是“mydate”和“mynumber”以及“mydesc”吗? – 2010-12-13 03:08:07
也许我简化了代码。 “linesubstring”是substringWithRange的结果。由于这部分代码工作正常,我省略了它。 strDate和strValue是格式化程序。那我也省略了。是。我正在尝试阅读的文本文件是一种CSV文件。我读了一行,搜索一个模式,解析它,并将它存储到变量中。 – 2010-12-13 15:27:15