objective-c - 调用完成块时ObjectiveC崩溃
问题描述
在网络调用之后调用块时,我遇到了崩溃。这是代码:
- (void) signInUser:(NSString*) username
password:(NSString*)password
success: (void(^)())success
failure:(void(^)(NSError *error))failure
{
self.api.username = username;
self.api.password = password;
[self.api getAuthorityFeatureStatusCompletion:^(NSDictionary *dict) {
//successfully auth, save the credentials
[SSKeychain setPassword:password
forService:[[NSBundle mainBundle] bundleIdentifier]
account:username];
NSString *accountCodesEnabled = [[dict valueForKey:@"AccountCodesEnabled"] stringValue];
NSString *isVismaEnabled = [[[dict valueForKey:@"VocuherAccounting"] valueForKey:@"IsEnabled"] stringValue];
if ([accountCodesEnabled isEqualToString:@"1"]) {
[[NSUserDefaults standardUserDefaults] setObject:accountCodesEnabled forKey:@"AccountCodesEnabledStatus"];
[[NSUserDefaults standardUserDefaults] setObject:isVismaEnabled forKey:@"GetStatusOfVismaEnabled"];
} else {
[[NSUserDefaults standardUserDefaults] setObject:@"0" forKey:@"GetStatusOfVismaEnabled"];
}
//as we were able to sign in, get the other data we need for app to work
success(); <============ crashes when calling this guy
}
andErrorHandling:^(NSError *error) {
//we could not get the info for some reason, abandon
api.username = nil;
api.password = nil;
failure(error);
}];
}
我检查了一下,我的成功块不是零,奇怪的是,如果我注释掉 success() 调用上方的代码,它可以正常工作。因此,它向我表明该块可能没有正确保留,但我不确定如何去修复它。我尝试在每个范围内复制块,但这也没有解决它。
崩溃是:线程 11:EXC_BAD_ACCESS(代码=1,地址=0x6b0b),控制台中没有数据,堆栈跟踪
#0 0x00007fff50bad357 in objc_retain ()
#1 0x00007fff50bad65d in objc_storeStrong ()
#2 0x00000001083f600b in __29-[LoginViewController login:]_block_invoke at /Users/otusweb/Projects/MoreFlo/ISUPOS/Controllers/View Controller/LoginViewController.m:309
#3 0x000000010842b72e in __51-[UserManager signInUser:password:success:failure:]_block_invoke at /Users/otusweb/Projects/MoreFlo/ISUPOS/Managers/UserManager.m:78
#4 0x00000001085bb221 in -[APIMaster handleAPIResponseWithData:response:error:success:failure:] at /Users/otusweb/Projects/MoreFlo/ISUPOS/Models/WebClasses/APIMaster.m:697
#5 0x00000001085b5a21 in __66-[APIMaster getAuthorityFeatureStatusCompletion:andErrorHandling:]_block_invoke at /Users/otusweb/Projects/MoreFlo/ISUPOS/Models/WebClasses/APIMaster.m:88
以及我调用此方法的代码(在点击按钮时调用):
[self.userManager signInUser:self.textFieldEmail.text
password:self.textFieldPassword.text
success:^(NSDictionary *dict) {
//successfully auth,
dispatch_async(dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUDForView: self.view animated:true];
});
}
有什么线索吗?
解决方案
推荐阅读
- javascript - 在添加的新文件上运行的 Cronjob
- r - 根据给定变量识别连续序列
- css - CSS中的二维数组网格顺序
- javascript - 有没有一种方法可以将图像用作画布的背景,而不会在每次间隔“删除”屏幕的一部分时都被擦除?
- ios - 来自 xib 文件的连接视图未显示且始终为零
- javascript - 为什么IE11、Edge只能存储2个cookie?
- css - SCSS 编译为 CSS 显示错误:未定义的 mixin
- optimization - 在微服务架构中使用 GraphQL API 网关时减少请求
- .net - Cannot find the latest version of a package on NuGet
- python-3.x - 满足特定条件时合并两个数据帧