dismissViewControllerAnimated崩溃(Objective-C)

时间:2015-05-27 05:19:58

标签: ios objective-c

当视频控制器被解除时,大约1%的用户遇到崩溃。我自己无法重现它,但Crashlytics正在给我堆栈中的崩溃代码。从统计数据来看,问题似乎与某个操作系统版本或某种设备类型无关。

以下是相关的代码段。

LoginViewController.m的某个地方,我有

if (someCondition) {
    PinViewController* pinViewController = [[PinViewController alloc] initWithSecret:secret target:self andLoginSuccessfulSelector:@selector(notifyAboutLoginAsync:)];
    [self presentViewController:pinViewController animated:YES completion:nil];
} else {
    [self performSelector:@selector(notifyAboutLoginAsync:) withObject:nil afterDelay:0.01];
}

notifyAboutLoginAsync:看起来像这样:

- (void)notifyAboutLoginAsync:(id)data {
    [self dismissViewControllerAnimated:YES completion:nil]; // crash happens on this line!
}

在上面的代码中,我将notifyAboutLoginAsync:选择器传递给PinViewController的{​​{1}}方法,以便我可以在init中使用它:< / p>

PinViewController

然后在@property (readwrite) SEL loginSuccessfulSelector; - (id)initWithSecret:(NSString *)pSecret target:(id)sTarget andLoginSuccessfulSelector:(SEL)successfulSelector { ... self.loginSuccessfulSelector = successfulSelector; ... } 我也有

PinViewController

崩溃发生在- (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; if (successful) { [[self target] performSelectorOnMainThread:[self loginSuccessfulSelector] withObject:[self pin] waitUntilDone:false]; } } 方法中。

我的猜测是,当我调用notifyAboutLoginAsync:时,LoginViewController可能已被解除,但我无法验证它,因为我无法自行复制它。我的猜测可能是原因吗?如果是这样,有没有办法检查我的控制器是否已被解雇,然后再致电dismissViewControllerAnimated:

在末尾附加崩溃痕迹。

dismissViewControllerAnimated:

0 个答案:

没有答案