Objective c NSString isEqualToString赢得';t返回true,并且无法识别选择器
我有一个字符串Objective c NSString isEqualToString赢得';t返回true,并且无法识别选择器,objective-c,xcode,macos,cocoa,nsstring,Objective C,Xcode,Macos,Cocoa,Nsstring,我有一个字符串dummyString,需要与100进行比较。这是我的密码 dummyString = [prefs objectForKey:@"displaySize"]; [self setDisplaySize:dummyString]; NSLog(@"Getting ready to set display controller with value %@", dummyString); NSLog(@"Tried 1"); if ([dummyString isEqual:
dummyString
,需要与100进行比较。这是我的密码
dummyString = [prefs objectForKey:@"displaySize"];
[self setDisplaySize:dummyString];
NSLog(@"Getting ready to set display controller with value %@", dummyString);
NSLog(@"Tried 1");
if ([dummyString isEqual: @"5"]) {
NSLog(@"Loaded preferences, display Small");
displayChanged.selectedSegment = 0;}
NSLog(@"Tried 2");
if ([dummyString isEqual: @"40"]){
NSLog(@"Loaded preferences, display is Med!");
displayChanged.selectedSegment = 1;}
NSLog(@"Tried 3");
if ([dummyString isEqualToString:@"100"]){
NSLog(@"Loaded preferences, display LARGE");
displayChanged.selectedSegment = 2;}
NSLog(@"Completed trying to get display controller with value %@", dummyString);
这是NSLog
2013-03-26 17:22:49.101 CopyBot[1011:303] Getting ready to set display controller with value 100
2013-03-26 17:22:49.102 CopyBot[1011:303] Tried 1
2013-03-26 17:22:49.102 CopyBot[1011:303] Tried 2
2013-03-26 17:22:49.102 CopyBot[1011:303] Tried 3
2013-03-26 17:22:49.103 CopyBot[1011:303] -[__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x64c7
2013-03-26 17:22:49.103 CopyBot[1011:303] -[__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x64c7
我尝试了几种声明不同字符串的变体,但似乎无法让它输入“if”语句来比较isEqual或isEqualToString。非常感谢您的帮助。正如您在错误消息
[\uu NSCFNumber isEqualToString:]:无法识别的选择器…
问题在于\uu NSCFNumber
没有isEqualToString
方法
\uu NSCFNumber
是Cocoa在运行时表示大多数NSNumber
s的方式
所以你的问题是dummyString根本不是一个字符串,它是一个
NSNumber
根据你的错误,你的dummyString
不是NSString
事实上它是NSNumber
您可以将字符串@“5”
转换为NSNumber
,然后比较:
BOOL equal=[dummyString isEqualToNumber:@([@"5" integerValue])];
或者。将dummystring值转换为字符串,然后比较:
BOOL equal=[NSString stringWithFormat:@"%d",[dummyString integerValue]] isEqualToString:@"5"];
[prefs objectForKey:@“displaySize”]正在返回一个NSNumber。您认为它们是如何工作的?从不调用每个if()语句中的NSLog输出@AndrewMadsenIt从未被调用,因为调用isEqualToString:时会引发异常。@newtoxcode:仅因为变量的类型为NSString并不意味着对象为
[prefs objectforKey:@“startup”]
显然是一个NSNumber。@newtoxcode仅仅因为存储在一个外部写有“string”的框中,并不意味着它实际上包含一个string。Objective-C通常非常乐意将值存储在输入错误的变量中。要真正检查某个内容是否是您期望的类型,请使用isKindOfClass:
,即[dummyString isKindOfClass:[NSString class]]
将返回false。@newtoxcode作为一个简单的示例,NSString*notAString=(id)[NSNumber numberwhithint:4]
。编译器非常乐意为您编译此文件,但如果您试图对其执行字符串操作,您的程序将崩溃。@newtoxcode:正如名称dummyString
所示,我们大多数人会在字符串上摩擦我们的头。但是您有一个名为[dummyString class]
的方法,它将返回其类类型。只需将此记录下来,您就可以确定它是字符串、数组还是数字。非常好的建议。非常感谢。