Хорошо, у меня есть приложение, которое использует контроллер вкладок. Однако прежде чем я хочу, чтобы контроллер вкладок загрузился, я хочу, чтобы пользователь ввел экран, который позволяет ему сначала ввести свой номер телефона, так как мне нужно сохранить номер телефона пользователя для использования в приложении. Я сохраняю номер в приложении, как это.
[[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, чтобы инициализировать контроллер вкладок и все его представления