【发布时间】:2010-12-13 02:52:38
【问题描述】:
我有一个解析小文本文件的方法(下面的代码是简化版):
- (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/check 时。
那为什么?我虽然 date 可能是保留字并交换了它,但行为相同。
第二个问题是最后一个 if(嵌套的)。调试代码,我可以看到 xcode 将其显示为“超出范围”,但 !number 失败(xcode 认为它是有效的)...
我尝试了其他组合,例如[number isNotEqualTo:[NSNull null]](这个会抛出错误 EXC_BAD_ACCESS),但没有成功。
请问,有人可以给点提示吗?我是可可/objective-c 的新手。我来自java...
TIA,
鲍勃
【问题讨论】:
-
这里好像少了一些关键代码。 linesubstring、strDate 和 strValue 定义在哪里,它们是什么?此外,要比较字符串,您使用
[myString isEqualToString:otherString],而不是isEqual。我根本不明白您实际上要对代码做什么。您是否尝试将文件中的一行文本的内容设置为适当的变量类型? “mydate”、“mynumber”和“mydesc”实际上在文本文件中吗? -
可能我把代码简化了很多。 “linesubstring”是 substringWithRange 的结果。我省略了它,因为这部分代码工作正常。 strDate 和 strValue 是格式化程序。我当时也省略了。是的。我试图阅读的文本文件是一种 CSV 文件。我读了一行,搜索一个模式,解析它,并将它存储到变量中。
标签: objective-c cocoa xcode nsdate nsnumber