Обновление iPhone AppDelegate - PullRequest
       2

Обновление iPhone AppDelegate

0 голосов
/ 16 февраля 2012

Хорошо, у меня есть приложение, которое использует контроллер вкладок. Однако прежде чем я хочу, чтобы контроллер вкладок загрузился, я хочу, чтобы пользователь ввел экран, который позволяет ему сначала ввести свой номер телефона, так как мне нужно сохранить номер телефона пользователя для использования в приложении. Я сохраняю номер в приложении, как это.

[[NSUserDefaults standardUserDefaults] setInteger:1234 forKey:@"PhoneNumber"];

Обычно, когда они впервые входят в приложение, открывается окно, в котором они могут сохранить введенный номер в текстовом поле, и оно сохраняется с помощью NSuserDefaults.

В appDelegate у меня есть оператор if, чтобы проверить, сохранено ли значение или нет

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    NSInteger phoneNumber=[[NSUserDefaults standardUserDefaults] integerForKey:@"PhoneNumber"];

    if(phoneNumber == 0){
        //So this is the window which allow them to enter their phone number
        UIViewController *phoneNumberVC = [[PhoneNumberVC alloc] initWithNibName:@"PhoneNumber" bundle:nil];
        UIViewController *phoneNumberRootVC = [[UINavigationController alloc] initWithRootViewController:phoneNumberVC];
        self.window.rootViewController = phoneNumberRootVC;    
        [self.window makeKeyAndVisible];    
    }else{
        //Code here sets up tab controller and all the tabs etc
    }
}

Теперь код работает нормально, за исключением того факта, что после того, как число сохранено, мне нужно выйти из симулятора и снова запустить его, после чего появятся экраны вкладок. Тем не менее, я хочу, чтобы контроллер вкладок загрузился, как только пользователь нажал кнопку на экране номера телефона, чтобы сохранить номер. Текущий метод на экране номера телефона таков:

-(IBAction)testing{
    NSString *st = [phoneTF text];
    NSInteger pn = [st intValue];
    NSString *display = [NSString stringWithFormat:@"%i", pn];
    [[NSUserDefaults standardUserDefaults] setInteger:pn forKey:@"PhoneNumber"];
    UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Warning"
                                                     message:display
                                                    delegate:self
                                           cancelButtonTitle:@"Okay"
                                           otherButtonTitles:nil];
    [alert show];
}

Предупреждение предназначено только для тестирования. Поэтому после нажатия кнопки я хочу, чтобы контроллер вкладок загружался в делегате приложения. Могу ли я обновить приложение или делегат приложения?

Буду очень признателен, если кто-нибудь укажет мне правильное направление !!!

EDIT

Попробовал

[self.navigationController pushViewController:app.tabBarController animated:YES];

Но поскольку tabBarController еще не инициализирован, он не будет работать

Ошибка консоли

Application tried to push a nil view controller on target <UINavigationController: 0x8056d40>.

Итак, мне нужно снова запустить AppDelegate, чтобы инициализировать контроллер вкладок и все его представления

1 Ответ

1 голос
/ 16 февраля 2012

заменить

UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Warning" message:display
                                            delegate:self cancelButtonTitle:@"Okay" otherButtonTitles: nil];
[alert show];

с кодом, который просит контроллер навигации переключиться на другой вид, который вы хотите:

YourOtherViewController *yourOtherViewController = [[YourOtherViewController alloc] init];
[self.navigationController pushViewController:yourOtherViewController animated:YES];

Редактировать

Если вы хотите получить доступ к AppDelegate из phoneNumberVC, вы можете сделать что-то вроде следующего:

if(phoneNumber == 0){
    UIViewController *phoneNumberVC = [[PhoneNumberVC alloc] initWithNibName:@"PhoneNumber" bundle:nil];
    phoneNumberVC.appDelegate = self; // add this property to PhoneNumberVC
    UIViewController *phoneNumberRootVC = [[UINavigationController alloc] initWithRootViewController:phoneNumberVC];
    self.window.rootViewController = phoneNumberRootVC;
} else {
    [self setUpTabViewController]; // add this function
}
[self.window makeKeyAndVisible];

А в PhoneNumberVC что-то вроде:

[self.appDelegate setUpTabViewController];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...