将NSString与字符串文字进行比较不起作用。
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath: @"/usr/bin/sw_vers"];
[task setArguments:[NSArray arrayWithObject:@"-productVersion"]];
NSPipe * out = [NSPipe pipe];
[task setStandardOutput:out];
[task launch];
[task waitUntilExit];
NSFileHandle * read = [out fileHandleForReading];
NSData * dataRead = [read readDataToEndOfFile];
NSString * actualOSVersion = [[NSString alloc] initWithData:dataRead encoding:NSUTF8StringEncoding];
NSLog(@"%@", actualOSVersion);
if ([actualOSVersion isEqualToString:@"10.8.5"]) {
NSLog(@"%@", actualOSVersion);
}
NSLog(@“%@”,actualOSVersion);打印10.8.5但if语句始终为false。
当我将NSString * temp = @“10.8.5”与字符串文字@“10.8.5”进行比较时,它总是返回true。任何人都可以帮我理解这个问题。
答案 0 :(得分:2)
有可能在actualOSVersion中有更多字符,包括空格或换行符。
将引号放在格式字符串中,以便在结果中看到空格字符。
或者“修剪”字符串变量,然后将其与isEqualToString进行比较。
答案 1 :(得分:1)
该命令的输出在结尾处有一个额外的换行符。因此actualOSVersion
中的字符串等于@"10.8.5\n"
。你需要修剪它,例如:
actualOSVersion = [actualOSVersion stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
答案 2 :(得分:0)
尝试将日志语句更改为:
NSLog(@"\"%@\"", actualOSVersion);
这样,输出的字符串将被""包围。并且您将能够看到是否有任何额外的字符,如空格或换行符。