Ios 为什么在比较NSString';s([\uu NSCFNumber isEqualToString:]:发送到实例的选择器无法识别)

Ios 为什么在比较NSString';s([\uu NSCFNumber isEqualToString:]:发送到实例的选择器无法识别),ios,objective-c,Ios,Objective C,我有一个NSMutableArray(\u theListOfAllQuestions),我正在用文件中的数字填充它。然后我将该数组中的对象与qNr(NSString)进行比较,得到了错误。我甚至将数组转换为另一个NSString,\u checkQuestions,以确保我正在比较NSStrings。我也使用这个项目进行了测试 -(void)read_A_Question:(NSString *)qNr { NSLog(@"read_A_Question: %@", qNr); int cou

我有一个
NSMutableArray(\u theListOfAllQuestions)
,我正在用文件中的数字填充它。然后我将该数组中的对象与
qNr(NSString)
进行比较,得到了错误。我甚至将数组转换为另一个
NSString
\u checkQuestions
,以确保我正在比较
NSStrings
。我也使用这个项目进行了测试

-(void)read_A_Question:(NSString *)qNr {
NSLog(@"read_A_Question: %@", qNr);
int counter = 0;
for (NSString *item in _theListOfAllQuestions) {
    NSLog(@"item: %@", item);
    _checkQuestions = _theListOfAllQuestions[counter]; //_checkQuestion = NSString
    NSLog(@"_checkQuestions: %@", _checkQuestions);
    if ([_checkQuestions isEqualToString:qNr]) {
        NSLog(@">>HIT<<");
        exit(0);   //Just for the testing
    }
    counter++;
 }
…和错误:

-[\uu NSCFNumber isEqualToString:]:发送到实例0x9246d80的选择器无法识别 ***由于未捕获异常“NSInvalidArgumentException”而终止应用程序,原因:'-[\u NSCFNumber isEqualToString::无法识别的选择器已发送到实例0x9246d80'

我确实相信我仍然在用某种数字比较
NSString
,但在我看来,我似乎在比较
NSString
NSString


我在这里真的需要一些帮助1)理解问题,2)解决问题?

您的
\u ListFallQuestions
数组有
NSNumber
对象,而不是
NSString
对象。因此,您不能直接使用
IsequalString

试试这个

for (NSString *item in _theListOfAllQuestions) {
    NSLog(@"item: %@", item);
    _checkQuestions = _theListOfAllQuestions[counter]; //_checkQuestion = NSString
    NSLog(@"_checkQuestions: %@", _checkQuestions);
    if ([[_checkQuestions stringValue] isEqualToString:qNr]) {
        NSLog(@">>HIT<<");
        exit(0);   //Just for the testing
    }
    counter++;
 }
for(列表问题中的NSString*项){
NSLog(@“项:%@”,项);
_checkQuestions=\u theListOfAllQuestions[计数器];//\u checkQuestion=NSString
NSLog(@“_checkQuestions:%@”,_checkQuestions);
if([[u-checkQuestions-stringValue]isEqualToString:qNr]){
NSLog(@“>>点击替换此行

if ([_checkQuestions isEqualToString:qNr])


希望它对您有所帮助。

那么,
\u checkQuestions
至少在一种情况下是一个
NSNumber
而不是一个
NSString
\u listofallquestions
中到底是什么?它是如何填充的?不需要
stringWithFormat
,因为
NSNumber
已经有了一个属性
-stringValue
以字符串形式返回数字。@yulz我不知道检查问题的数据类型,使用stringWithFormat也没有什么害处。@Pratek,谢谢。感谢@Prateek:-)ABC之前也尝试过这一点,并得到了“对于'NSString'没有可见的@interface声明选择器'stringValue'“这是因为您应该将
\u checkQuestions
声明为NSNumber而不是NSSString。您的数组有NSNumber而不是string。使用
[NSString stringWithFormat:@”%@,\u checkQuestions]在这种情况下不建议使用
。这将在以后产生意外的结果。请将_checkQuestions设置为
NSNumber。您可以键入cast it
[(NSNumber*)_checkquestionsstringvalue]
在您的if语句中,或更改您声明的类型_checkquestionsto NSNumberI尝试了上述两种建议,但均未出现错误,但如果命中?…正如我从Prateek得到的建议一样。@ABC,我继续测试并发现了一个输入错误,这意味着您的建议确实有效,我的尴尬错误。您你说得对,非常感谢:-)…现在我学到了一些非常有用的东西!+1
if ([_checkQuestions isEqualToString:qNr])
 if ([[NSString stringWithFormat:@"%@",_checkQuestions] isEqualToString:[NSString stringWithFormat:@"%@",qNr]])