iOS:奇怪的错误... UIAlertView没有显示......即使它被调用了

时间:2014-03-11 09:11:07

标签: ios objective-c uialertview

我不知道我的错误在哪里......我已经在我的应用程序的其他视图控制器中使用了这些代码行,并且它可以工作。我设置了断点,如果正确执行并调用[警告显示],则无效!这是我的viewWillAppear方法中的第一行(在[super viewWillAppear ...之后]。

if([self.category isDeleted] || ![((AppDelegate *)[[UIApplication sharedApplication] delegate]).managedObjectContext existingObjectWithID:self.category.objectID error:NULL]){
        UIAlertView *warning = [[UIAlertView alloc]initWithTitle:NSLocalizedString(@"CategoryDeletedError", nil) message:NSLocalizedString(@"CategoryDeletedErrorExplanation", nil) delegate:self cancelButtonTitle:NSLocalizedString(@"Ok", nil) otherButtonTitles:nil, nil];
        [warning show];
        NSLog(@"%@",warning);
    }

NSLog打印出来:

2014-03-11 10:08:08.133 App[752:70b] <UIAlertView: 0x8a8bb20; frame = (0 0; 0 0); opaque = NO; layer = <CALayer: 0x8aa2d60>>

所以创建了对象..但为什么它不起作用?我的视图控制器也正确地是UIAlertViewDelegate ...

3 个答案:

答案 0 :(得分:0)

框架为frame = (0 0; 0 0);,因此您无法看到它。也许NSLocalizedString返回空字符串。尝试使用@“CategoryDe​​letedError”设置标题;如果显示,请检查项目中的本地化字符串文件。

答案 1 :(得分:0)

知道了......发布后我就明白了。警告将在我的viewWillAppear方法之后显示。但是,有一行代码在此if子句之后调用已删除的实体并使应用程序崩溃。因此,我没有在if和if子句中写这个,而是像这样解决了它:

在:

if([self.category isDeleted] || ![((AppDelegate *)[[UIApplication sharedApplication] delegate]).managedObjectContext existingObjectWithID:self.category.objectID error:NULL]){
        UIAlertView *warning = [[UIAlertView alloc]initWithTitle:NSLocalizedString(@"CategoryDeletedError", nil) message:NSLocalizedString(@"CategoryDeletedErrorExplanation", nil) delegate:self cancelButtonTitle:NSLocalizedString(@"Ok", nil) otherButtonTitles:nil, nil];
        [warning show];
        NSLog(@"%@",warning);
    }

Rest of the code...crashing

现在:

if([self.category isDeleted] || ![((AppDelegate *)[[UIApplication sharedApplication] delegate]).managedObjectContext existingObjectWithID:self.category.objectID error:NULL]){
        UIAlertView *warning = [[UIAlertView alloc]initWithTitle:NSLocalizedString(@"CategoryDeletedError", nil) message:NSLocalizedString(@"CategoryDeletedErrorExplanation", nil) delegate:self cancelButtonTitle:NSLocalizedString(@"Ok", nil) otherButtonTitles:nil, nil];
        [warning show];
        NSLog(@"%@",warning);
    } else {
       Rest of the code
    }

答案 2 :(得分:0)

试试吧

if([self.category isDeleted] || ![((AppDelegate *)[[UIApplication sharedApplication] delegate]).managedObjectContext existingObjectWithID:self.category.objectID error:NULL])
{

dispatch_async(dispatch_get_main_queue(), ^{
                   UIAlertView *warning = [[UIAlertView alloc]initWithTitle:NSLocalizedString(@"CategoryDeletedError", nil) message:NSLocalizedString(@"CategoryDeletedErrorExplanation", nil) delegate:self cancelButtonTitle:NSLocalizedString(@"Ok", nil) otherButtonTitles:nil, nil];
        [warning show];
        NSLog(@"%@",warning);
                 });


   }