objective-c - 创建NSError *导致应用程序崩溃

标签 objective-c crash nserror

我有以下情况:

我的域类得到一些输入来验证它,如果验证通过,则继续保存数据。
当控制流到达if语句时,应用程序崩溃

- (BOOL)createGmailAccountWithName:(NSString *)name
                                 email:(NSString *)email
                           andPassword:(NSString *)password
                                 error: (NSError **) error {
  if (!name || name.length == 0) {
    *error = [self createError:@"name"];
    return NO;
  }

  if (!email || email.length == 0) {
    *error = [self createError:@"email"];
    return NO;
  }

  if (!password || password.length == 0) {
    *error = [self createError:@"password"];
    return NO;
  }

  //..
}


-(NSError *) createError: (NSString *) field {

  NSString *errorMessage = [NSString stringWithFormat:@"Property %@ is required", field];

  NSDictionary *userInfo = @{
    NSLocalizedFailureReasonErrorKey: NSLocalizedString(errorMessage, nil)
  };

  NSError *error = [NSError errorWithDomain:ACCOUNT_STORE_ERROR_DOMAIN
  code:-1
  userInfo:userInfo];

  return error;
}

当我注释掉发生验证的所有行时,应用程序不会崩溃。
我不知道为什么会这样。谁能指出我正确的方向?

最佳答案

如果您有这种方法:

- (BOOL)createGmailAccountWithName:(NSString *)name
                             email:(NSString *)email
                       andPassword:(NSString *)password
                             error: (NSError **) error

人们可能会这样称呼它:
NSError *error;
[accountCreator createGmailAccountWithName:@"Ben" 
                                     email:@"foo@example.com" 
                               andPassword:@"pwd"
                                     error:&error];
if (error)
{
    NSLog(@"Hey I got an error: %@", error);
}

或像这样:
[accountCreator createGmailAccountWithName:@"Ben"
                                     email:@"foo@example.com"
                               andPassword:@"pwd"
                                     error:NULL];
// I couldn't care less about an error

在第二种情况下,您的代码将尝试取消引用**error*error不是有效的指针,并且会导致崩溃。

关于objective-c - 创建NSError *导致应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27137483/

相关文章:

ios - CIPhotoEffect CIFilters 在颜色管理方面是不变的。是什么赋予了 CIPhotoEffect 滤镜这个属性?

java - 启用 GPS 时启动我的 Android 应用程序强制关闭

Java 异常和 Objective C NSError

crash - 获取 CGRect View

windows - 带有 User32.dll 的 LoadLibraryA 在 ntdll.dll(x64 程序集)中崩溃

ios - NSError 没有可见界面 iOS 8.1

objective-c - 如何跨线程跟踪NSError对象?

iphone - 如何使用临时变量在 Objective-C/Xcode 中定义返回的 NSString 函数?

ios - 是否可以在iOS中使用第三方音频单元?

ios - 我如何为 iOS 克隆/复制某种 UIView?