解雇UIAlertView的问题

时间:2011-03-10 13:05:43

标签: iphone user-interface uialertview

我正在使用带有“请等待”的UIAlertView和UIActivityIndi​​catorView。我用

显示它
{
    ...
    [self performSelectorInBackground:@selector(sh) withObject:nil];
    //i've tried also
    //[NSThread detachNewThreadSelector:@selector(showWaiting) toTarget:self withObject:nil];
    ...
}

- (void)showWaiting {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    [waitingAlert show];
    [pool drain];
}

出现警报时,屏幕变暗并变为非活动状态。当有时间解除警报时,我会这样做

[waitingAlert dismissWithClickedButtonIndex:0 animated:NO];

此警报消失后,但有时(机会约为5%)屏幕仍然像以前一样变暗和不活动。 有人遇到过这样的问题吗? 谢谢!

3 个答案:

答案 0 :(得分:3)

这不是您正在寻找的答案......但这是“正确”的答案,从长远来看会为您节省一些时间:

你在滥用UIAlertView。它不应该用于进度指示器和“请等待”对话框。它被设计为被用户按下按钮而被解雇 - UIAlertView永远不应该自行消失(更正:实际上,它可以; Apple的API支持解雇它。但是这样的事情应该非常小心地使用。)

如果您继续以这种方式滥用UIAlertView,请勿在应用商店提交期间拒绝您的应用时感到惊讶,然后您必须以其他方式重做。

请参阅我对这个问题的回答:

Multiple AlertViews - Remove the alertview that is behind another alertview

答案 1 :(得分:1)

由于occulus状态避免像这样使用UIAlertView,

我推荐MBProgressHUD,它非常易于使用,看起来很棒,专为此目的而设计。

答案 2 :(得分:0)

您必须在NSAutoreleasePool之外创建,显示和发布提醒。例如,您在后台拨打电话:

...
[NSThread detachNewThreadSelector:@selector(showWaiting) toTarget:self withObject:nil];
...

这个电话有一个自动释放池:

- (void)showWaiting {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    [self performSelectorInMainThread:@selector(showMyAlert) withObject:nil waitUntilDone:NO];
    //[waitingAlert show];
    [pool drain];
}

然后你必须使用主线程显示警告。

- (void)showMyAlert {
    UIAlertView * myAlert = [[UIAlertView alloc] initWith...]; 
    [myAlert show];
    [myAlert release];
}

如果您尝试在自动释放池中显示警报并且已经耗尽,则警报会消失。

我希望这有帮助!