用于检查用户输入的布尔方法

Posted

技术标签:

【中文标题】用于检查用户输入的布尔方法【英文标题】:Bool method to check user input 【发布时间】:2011-03-23 03:02:45 【问题描述】:

大家好,我正在尝试创建一个布尔方法,该方法将在单击提交按钮时根据用户输入的字段返回值。

    - (BOOL)checkuser:(NSString*)input

    bool result = NO;


    if ([input isEqualToString:@"test"]) 
    
        result = YES;
    

    else
    
        result = NO;
    

    return result;


我将这个方法从我的程序中引用为

else if ([Username checkuser] == YES)
     // do something

带有以下警告 'NSString' 可能不响应'-checkuser'

我不明白为什么我的程序此时会因以下错误而崩溃。

2011-03-22 22:57:25.942 分配 2[824:207] -[NSCFString checkuser]:无法识别的选择器发送到实例 0x4b7c050 2011-03-22 22:57:25.944 分配 2[824:207] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSCFString checkuser]:无法识别的选择器发送到实例 0x4b7c050” * 在第一次抛出时调用堆栈: ( 0 CoreFoundation 0x00db8be9 异常预处理 + 185 1 libobjc.A.dylib 0x00f0d5c2 objc_exception_throw + 47 2核心基础0x00dba6fb-[NSObject(NSObject)不识别选择器:]+187 3 CoreFoundation 0x00d2a366 __转发 + 966 4 核心基础 0x00d29f22 _CF_forwarding_prep_0 + 50 5 赋值 2 0x00002958 -[Assignment_2ViewController SubmitbuttonPressed:] + 727 6 UIKit 0x002c1a6e-[UIApplication sendAction:to:from:forEvent:] + 119 7 UIKit 0x003501b5-[UIControl sendAction:to:forEvent:] + 67 8 UIKit 0x00352647-[UIControl(内部)_sendActionsForEvents:withEvent:] + 527 9 UIKit 0x003511f4-[UIControl touchesEnded:withEvent:] + 458 10 UIKit 0x002e60d1-[UIWindow_sendTouchesForEvent:] + 567 11 UIKit 0x002c737a -[UIApplication 发送事件:] + 447 12 UIKit 0x002cc732 _UIApplicationHandleEvent + 7576 13 图形服务 0x016eea36 PurpleEventCallback + 1550 14 核心基础 0x00d9a064 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION + 52 15 核心基础 0x00cfa6f7 __CFRunLoopDoSource1 + 215 16 核心基础 0x00cf7983 __CFRunLoopRun + 979 17 核心基础 0x00cf7240 CFRunLoopRunSpecific + 208 18 核心基础 0x00cf7161 CFRunLoopRunInMode + 97 19 图形服务 0x016ed268 GSEventRunModal + 217 20 图形服务 0x016ed32d GSEventRun + 115 21 UIKit 0x002d042e UIApplicationMain + 1160 22 赋值 2 0x00001c04 主 + 102 23 赋值 2 0x00001b95 开始 + 53 ) 在抛出“NSException”实例后调用终止 节目接收信号:“SIGABRT”。 (gdb)

【问题讨论】:

【参考方案1】:

你把一个非常简单的问题复杂化了:

- (BOOL) checkuser:(NSString*)input 
    return [input isEqualToString:@"test"];

然后调用它:

if ([Username checkUser:@"DONT FORGET YOUR PARAM HERE"]) 
    // Do something...

在您的示例中,您没有将任何参数传递给您的方法...这是一个错误,因此是您的错误。

此外,如果您创建一个返回“BOOL”的方法,请确保您返回的是“BOOL”而不是“bool”。您必须始终牢记,基础类型可以不同,即使 bool 可以评估为 BOOL。

【讨论】:

【参考方案2】:
 else if ([Username checkuser] == YES)

checkuser 应该收到NSString*,但您没有发送它,这是错误消息的原因。所以,应该是-

假设someNSString 已初始化并且是NSString* 类型。

else if( ([Username checkuser:someNSString] ) == YES )
                           // ^^^^^^^^^^^^ Needs to be passed as the method prototype mentions so.

     // ....


NSString* someNSString = @"Forgot to pass this" ;
else if( ([Username checkuser:someNSString] ) == YES )
                           // ^^^^^^^^^^^^ Needs to be passed as the method prototype mentions so.

     // ....

【讨论】:

codeelse if( ([Username checkuser:someNSString] ) == YES ) // .... code如果我这样做,这个程序又崩溃了 如果我像 [checkuser:someNSString] 那样做,它会说 checkuser undeclared @user671247 - 我特别提到someNSStringNSString* 类型,需要事先声明和初始化。这不是预定义的东西。

以上是关于用于检查用户输入的布尔方法的主要内容,如果未能解决你的问题,请参考以下文章

用于检查 char 数组是不是包含 Java 中用户给定字母的 if 语句

如何启用我的 html 页面以使用两个布尔字段值检查用户并使用“if”语句显示他们的数据?

if语句检查在iOS应用程序中输入的用户名和密码

检查电子邮件是不是存在的最佳方法

检查用户是不是更改了连续子表单记录集的最简单方法?

Android:检查当前用户是不是是客人