Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何从单例中触发视图显示?_Ios_Objective C - Fatal编程技术网

Ios 如何从单例中触发视图显示?

Ios 如何从单例中触发视图显示?,ios,objective-c,Ios,Objective C,我有一个代表用户的单例类。在整个应用程序中,当我需要访问有关用户的信息(如用户id、语言偏好等)时,我计划引用singleton。当我向singleton发送消息以访问用户尚未提供值的特定属性时,我希望显示一个允许用户提供值的视图 这里有一个例子,假设用户还没有设置她的语言偏好。我显示一个通知用户的警报,然后当用户单击“确定”时,我将她重定向到一个视图以设置她的语言首选项。我的问题在最后一部分。因为它是一个单体,不是UINavigation控制器的一部分,所以我无法触发新视图来显示。这可能吗?如

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

这里有一个例子,假设用户还没有设置她的语言偏好。我显示一个通知用户的警报,然后当用户单击“确定”时,我将她重定向到一个视图以设置她的语言首选项。我的问题在最后一部分。因为它是一个单体,不是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.
    }
}

实现模式的更好方法是使用通知。您的单身者可以向AppDelegate发布多个通知。在AppDelegate中,我们可以推送或显示viewController以选择用户首选项


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

这可能是一个愚蠢的响应,但是您不能将指向导航控制器的指针传递给需要它的类吗?e、 g.单身汉。然后你可以把viewcontroller推到那里,例如,指针指向InnavController.pushViewControllerpvc,等等?这是个聪明的主意。我要试一试。