通过另一个类调用方法

时间:2013-12-25 21:00:09

标签: ios objective-c cocoa-touch

在我的ViewController.m中,我声明了

@interface ViewController ()
{
    //...
    UIAlertView * alertView;
    //...
}

此处创建了alertview:

- (void)iCloudTeavitused {
    //...
    //If the alertview happens to be previously open, it will be dismissed (I use a corresponding flag to indicate this)
    [alertView dismissWithClickedButtonIndex:alertView.cancelButtonIndex
                                    animated:YES];
    //...
    alertView = [[UIAlertView alloc] initWithTitle:AMLocalizedString(@"iCloud is available", @"iCloud is available")
                                           message:AMLocalizedString(@"This app stores", @"This app automatically stores your settings in the cloud to keep them up-to-date across all your devices")
                                          delegate:nil
                                 cancelButtonTitle:nil
                                 otherButtonTitles:AMLocalizedString(@"OK_iCloudYES", @"OK"), nil];
    [alertView show];
    //...
}

我通过调用

来本地化单词
LocalizationSetLanguage(@"en");

本地化发生在Localization.m中,我也这样做:

ViewController* viewController = [[ViewController  alloc]init];
[viewController iCloudTeavitused];

因此,在某些情况下,iCloudTeavitused也会从ViewController.m调用。 问题是当它需要通过调用

来关闭警报视图(如果一个恰好打开)
[alertView dismissWithClickedButtonIndex:alertView.cancelButtonIndex
                                animated:YES];

在iCloudTeavitused中,此方法实际上没有被调用(例如,创建另一个alertView DOES 被调用。)

我的猜测是解雇旧的alertView并没有被解雇,因为我是通过Localization.m来调用它的。

我是对的,我的代码中我做错了什么?

2 个答案:

答案 0 :(得分:2)

我认为这里的问题可能是您正在处理ViewController的多个实例。如果使用ViewController的一个实例创建并显示警报视图,然后尝试通过另一个实例将其关闭,则它将无法工作。您应该将UIAlertView的实例保存在某个单例对象或您的app委托上,并在呈现新对象之前引用该对象以解除它。或者您可以使用浏览窗口中的所有子视图并关闭UIAlertView(如果有的话)。 / p>

for (id aSubview in [iView valueForKey:@"subviews"]) {
    if ([aSubview isKindOfClass:[UIAlertView class]]) {
        [(UIAlertView *)aSubview dismissWithClickedButtonIndex:0 animated:NO];
    }
}

答案 1 :(得分:0)

通过编写以下内容使iCloudTeavitused代表您的alertView:

alertView.delegate = self;

在alertView创建时。