2013-03-27 30 views
2

我有需要进行比较,以100字符串dummyString这里是我的代码的NSString isEqualToString不会返回true,而无法识别的选择

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。任何帮助表示赞赏。

+0

[prefs objectForKey:@“displaySize”]正在返回一个NSNumber。 – 2013-03-27 00:29:15

+0

你会如何认为他们在工作?每个if()语句内部的NSLog输出都不会被调用。 @AndrewMadsen – loopifnil 2013-03-27 00:33:17

+0

它从来没有被调用过,因为当你调用isEqualToString:时引发异常。 – 2013-03-27 00:41:47

回答

3

根据你的错误你dummyStringNSString的确是NSNumber

你可以把你的字符串@"5"NSNumber,然后比较:

BOOL equal=[dummyString isEqualToNumber:@([@"5" integerValue])]; 

或者。将dummystring的值转换为字符串,然后进行比较:

BOOL equal=[NSString stringWithFormat:@"%d",[dummyString integerValue]] isEqualToString:@"5"]; 
+0

非常感谢你,这个伎俩。 :-) – loopifnil 2013-03-27 00:43:56

+0

@newtoxcode:由于'dummyString'这个名字表明它是字符串,我们大多数人都会在这里碰到我们的头。但是你有一个名为'[dummyString class]'的方法,它将返回你的类类型。简单地记录下来,你可以确定它是字符串还是数组或数字。 – 2013-03-27 00:46:34

+0

伟大的建议。非常感激。 – loopifnil 2013-03-27 00:47:45

3

正如您在错误消息[__NSCFNumber isEqualToString:]: unrecognized selector...中看到的,问题是__NSCFNumber没有isEqualToString方法。

__NSCFNumber是Cocoa如何在运行时代表最多NSNumber s。

所以你的问题是,dummyString不是字符串的话,那是一个NSNumber

+0

@newtoxcode:只是因为变量是NSString类型并不意味着对象是。 '[prefs objectforKey:@“startup”]'显然是一个NSNumber。 – Chuck 2013-03-27 00:35:55

+0

@newtoxcode仅仅因为你将它存储在外部的“字符串”框中,并不意味着它实际上包含了一个字符串。 Objective-C通常非常乐意将值存储在错误类型的变量中。要真正检查某些东西是你期待的类型,使用'isKindOfClass:',即'[dummyString isKindOfClass:[NSString class]]'将返回false。 – cobbal 2013-03-27 00:36:21

+0

@newtoxcode作为一个更简单的例子,'NSString * notAString =(id)[NSNumber numberWithInt:4]'。编译器非常乐意为您编译,但如果您尝试对其进行字符串操作,您的程序将崩溃。 – cobbal 2013-03-27 00:38:35

相关问题