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]
的方法,它将返回其类类型。只需将此记录下来,您就可以确定它是字符串、数组还是数字。非常好的建议。非常感谢。