如何在单例内触发视图显示?

时间:2013-08-24 16:48:28

标签: ios objective-c

我有一个代表用户的单例类。在整个应用程序中,我计划在需要访问有关用户的信息时引用单例,例如用户ID,语言首选项等。当我向单例发送消息以访问用户尚未提供的特定属性时我希望显示一个允许用户提供值的视图。

这是一个例子,假设用户尚未设置她的语言偏好。我显示警告以通知用户,然后当她点击“确定”时,我将她重定向到视图以设置她的语言偏好。我的问题出在最后一部分。因为它是单例而不是UINavigation控制器的一部分,所以我无法触发新视图显示。这可能吗?如果是这样,我该怎么做?

-(NSString *) getUserNativeLanguageWithPromptIfNecessarry {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    nativeLanguage = [defaults stringForKey:@"nativeLanguage"];
    [self promptToSetLanguagePreferences];
    if(nativeLanguage == NULL) {
        //ask user to set language preferences
        [self promptToSetLanguagePreferences];
    }
    else {
        return nativeLanguage;
    }

}

-(void)promptToSetLanguagePreferences {
    // Create a new alert object and set initial values.
    NSString *message = [NSString stringWithFormat:@"Please set your language preference settings.  Click OK to go there now."];

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Language Preferences Not Set"
                                                    message:message
                                                   delegate:self
                                          cancelButtonTitle:@"Cancel"
                                          otherButtonTitles:@"OK", nil];
    // Display the alert to the user
    [alert show];
}

-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {

    if(buttonIndex==0){
        NSLog(@"userclickedCancel");

    }
    if(buttonIndex==1){
        NSLog(@"userclickedOK");
        ProfileViewController *pvc = [[ProfileViewController alloc] init];
        //RIGHT HERE IS WHERE I WANT TO PUSH PVC ONTO THE VIEW STACK.
    }
}

1 个答案:

答案 0 :(得分:0)

实现模式的更好方法是使用àNSNotification。您的单身人士可以向AppDelegate发布多个通知。在你的AppDelegate中,我们可以通过push或presentModal来调用viewController以选择用户首选项。

您还可以在singleton类和AppDelegate之间使用委托协议。它甚至更好,因为委托方法与模态viewController同步以检索选定的用户首选项值