NSString isEqaulToString不起作用

时间:2014-11-14 08:13:08

标签: ios objective-c macos cocoa nsstring

将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。任何人都可以帮我理解这个问题。

3 个答案:

答案 0 :(得分:2)

有可能在actualOSVersion中有更多字符,包括空格或换行符。

将引号放在格式字符串中,以便在结果中看到空格字符。

或者“修剪”字符串变量,然后将其与isEqualToString进行比较。

答案 1 :(得分:1)

该命令的输出在结尾处有一个额外的换行符。因此actualOSVersion中的字符串等于@"10.8.5\n"。你需要修剪它,例如:

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

答案 2 :(得分:0)

尝试将日志语句更改为:

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

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