NSString isEqaulToString 不起作用



将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,但如果语句总是假。

当我比较 NSString *temp = @"10.8.5" 和字符串文字 @"10.8.5" 时,它总是返回 true。谁能帮我理解这个问题。

实际 OSVersion 中可能有更多的字符,包括空格或换行符。

在格式字符串中加上引号,以便您可以在结果中看到空格字符。

或者在将字符串变量与isEqualToString进行比较之前对其进行"修剪"。

命令的输出末尾有一个额外的换行符。所以actualOSVersion中的字符串等于 @"10.8.5n" .您需要修剪它,例如:

actualOSVersion = [actualOSVersion stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

尝试将日志语句更改为:

NSLog(@""%@"", actualOSVersion);

这样,输出的字符串将被"包围,您将能够看到其中是否有任何额外的字符,如空格或换行符。

最新更新