我有以下情况:
我的域类得到一些输入来验证它,如果验证通过,则继续保存数据。
当控制流到达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/