提问人:otusweb 提问时间:12/6/2019 最后编辑:otusweb 更新时间:12/7/2019 访问量:299
调用完成块时 ObjectiveC 崩溃
ObjectiveC crashing when calling completion block
问:
在网络调用后调用块时,我遇到崩溃。代码如下:
- (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];
});
}
有什么线索吗?
答: 暂无答案
评论
success: (void(^)())success
success:^(NSDictionary *dict)