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]])