【问题标题】:Multiple If Conditions Using String isEqualTo使用字符串 isEqualTo 的多个 If 条件
【发布时间】:2013-07-17 01:15:27
【问题描述】:

谁能告诉我下面有什么问题?

if ( [isFormInputIncomplete   isEqualToString:@"1"] ||
     [isUserNameTaken         isEqualToString:@"1"] ||
     [isUserNameFormatInvalid isEqualToString:@"1"] ||
     [isPasswordInvalid       isEqualToString:@"1"] ||
     [isEmailInvalid          isEqualToString:@"1"] ) {

它给我的错误是:

-[__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x967a570

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x967a570'

** 2013 年 7 月 20 日编辑:我从一个 PHP 脚本返回一个 JSON,该脚本由 Android 和 iOS 版本的移动应用程序共享。 Java 很灵活,因为它能够接受一个数字并将其视为一个字符串。另一方面,Objective-C 没有那么宽容,这就是我遇到上述问题的原因。

【问题讨论】:

  • 这意味着你的变量是NSNumbers,而不是NSStrings。修复它。

标签: ios objective-c cocoa-touch if-statement nsstring


【解决方案1】:

其中一个或所有对象是 NSNumber 并且不知道如何处理 isEqualToString: 消息。

因为他们的名字,我猜都是带有布尔值的 NSNumbers

if ( [isFormInputIncomplete   isEqualToNumber:@YES] ||
     [isUserNameTaken         isEqualToNumber:@YES] ||
     [isUserNameFormatInvalid isEqualToNumber:@YES] ||
     [isPasswordInvalid       isEqualToNumber:@YES] ||
     [isEmailInvalid          isEqualToNumber:@YES] ) 

if ( [isFormInputIncomplete  boolValue] == YES ||
     //…) 

要检查一个对象是否属于某种类型(类或子类),您可以使用isObjectOfKind:

if([isFormInputIncomplete isKindOfClass: [NSNumber class]])

【讨论】:

  • 同意你和GB的观点。为了清楚起见,我可能会选择 '[isFoo boolValue] == YES'。
【解决方案2】:

看起来您的值之一是 NSNumber 而不是 NSString。我说不清是哪一个。当你找到它时,你会想要使用:

[isNumberValue isEqualToNumber:@1]

【讨论】:

    猜你喜欢
    • 2014-05-21
    • 1970-01-01
    • 2014-04-12
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多