我的班级有__strong NSError *authError;
成员
我想用一种方法捕捉并创建它并检查另一种方法。
因此,如果方法1中发生错误:
if([returnString rangeOfString:@"dd"].location != NSNotFound) {
NSMutableDictionary *errorDetail = [NSMutableDictionary dictionary];
[errorDetail setValue:@"Wrong user crediantials" forKey:NSLocalizedDescriptionKey];
authError = [NSError errorWithDomain:@"mydomain" code:101 userInfo:errorDetail];
return nil;
}
我将它直接分配给authError类成员。但是在最后一次执行后,authError变为零。 在方法2中:
if(authError != nil){
return NO;
}
条件返回YES
其他一些信息:方法2是shouldPerformSegueWithIdentifier
有人能给我一个暗示吗?
答案 0 :(得分:0)
这里的问题与“之后”一词的定义有关。您正在方法1中设置实例变量并在方法2中获取它。但是这不会告诉您有关操作的真实顺序的信息。如果在方法1有机会运行之前调用方法2,则方法2将发现您的实例变量为nil(因为这是它的自动初始化值)。
我的书有riff on this very topic(按“入口点”我的意思是运行时调用的方法):
增加您的挑战是您无法确切知道何时会调用入口点。文档可能会给您一般意义,但在大多数情况下,它并不能保证事件何时到达以及按什么顺序排列。你认为会发生什么,甚至文档引导你相信会发生什么,可能不是真正发生的事情。您自己的代码可能会触发意外事件。文档可能无法在发送通知时明确说明。在Cocoa中甚至可能存在一个错误,即事件的调用方式似乎与文档相矛盾。并且您无法访问Cocoa源代码,因此无法确定基础细节。因此,我还建议您在开发应用程序时,通过穴居人调试(NSLog;请参阅第9章)对您的代码进行大量检测。在测试代码时,请密切关注控制台输出并检查消息是否有意义。您可能会对发现的内容感到惊讶。