这给了我很大的麻烦。无论出于何种原因,当我使用此代码时,if语句始终计算为false:
while(!feof(file))
{
NSString *line = [self readNSString:file];
NSLog(@"%@", line);
NSLog(@"%@", search);
NSRange textRange;
textRange =[line rangeOfString:search];
if(textRange.location != NSNotFound)
{
NSString *result = [line substringFromIndex:NSMaxRange([line rangeOfString:search])];
resultView.text = result;
}
else
{
resultView.text = @"Not found";
}
}
当函数执行时,两个NSLog告诉我“line”和“search”字符串是它们应该是什么,那么为什么if语句总是评估为false?我必须错过一些简单的东西,让另一组眼睛变得很棒。感谢
编辑:(功能“readNSString”)
- (NSString*)readNSString:(FILE*) file
{
char buffer[300];
NSMutableString *result = [NSMutableString stringWithCapacity:256];
int read;
do
{
if(fscanf(file, "%299[^\n]%n%*c", buffer, &read) == 1)
[result appendFormat:@"%s", buffer];
else
break;
} while(r == 299);
return result;
}
编辑2:
通过调用第一个函数来设置搜索,并使用NSString *变量作为参数,如下所示:
NSString *textFieldText = [[NSString alloc]
initWithFormat:@"%@", textField.text];
[self readFile:textFieldText];
编辑3(NSLogs输出)
行:德国意大利法国
搜索:意大利
答案 0 :(得分:2)
我认为您正在使用rangeOfString
和NSNotFound
等,因此问题可能与使用{{从文件读取的数据创建字符串有关。 1}}。
我怀疑你的两种字符串格式之间可能存在编码问题 - 我会调查“%s”是否正确地将空终止的C字符串编码为与具有适当编码的unicode appendFormat:@"%s"
相同的格式。
尝试将NSString
函数中的值作为字符串文字进行硬编码,仅用于测试并查看该比较是否有效,如果是这样,这往往表明它可能与编码从文件创建的字符串。