大家好我正在尝试制作一个布尔方法,根据单击提交按钮时字段的用户输入返回值。
- (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 exceptionPreprocess + 185 1 libobjc.A.dylib 0x00f0d5c2 objc_exception_throw + 47 2 CoreFoundation 0x00dba6fb - [NSObject(NSObject)doesNotRecognizeSelector:] + 187 3 CoreFoundation 0x00d2a366 __ 转发 + 966 4 CoreFoundation 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 sendEvent:] + 447 12 UIKit 0x002cc732 _UIApplicationHandleEvent + 7576 13 GraphicsServices 0x016eea36 PurpleEventCallback + 1550 14 CoreFoundation 0x00d9a064 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION + 52 15 CoreFoundation 0x00cfa6f7 __CFRunLoopDoSource1 + 215 16 CoreFoundation 0x00cf7983 __CFRunLoopRun + 979 17 CoreFoundation 0x00cf7240 CFRunLoopRunSpecific + 208 18 CoreFoundation 0x00cf7161 CFRunLoopRunInMode + 97 19 GraphicsServices 0x016ed268 GSEventRunModal + 217 20 GraphicsServices 0x016ed32d GSEventRun + 115 21 UIKit 0x002d042e UIApplicationMain + 1160 22作业2 0x00001c04 main + 102 23作业2 0x00001b95开始+ 53 ) 抛出'NSException'实例后终止调用 程序收到信号:“SIGABRT”。 (gdb)
答案 0 :(得分:1)
你使一个非常简单的问题过于复杂:
- (BOOL) checkuser:(NSString*)input {
return [input isEqualToString:@"test"];
}
然后调用它:
if ([Username checkUser:@"DONT FORGET YOUR PARAM HERE"]) {
// Do something...
}
在您的示例中,您没有将任何参数传递给您的方法...这是一个错误的错误,因此您的错误。
此外,如果您创建一个返回'BOOL'的方法,请确保您返回'BOOL'而不是'bool'。您必须始终牢记基础类型可能不同,即使可以将bool计算为BOOL。
答案 1 :(得分:0)
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.
{
// ....
}