2014-10-13 3 views
0

Я создаю приложение iOS. Я реализовал интеграцию Facebook и twitter в своем приложении.Как реализовать segue при нажатии кнопки?

У меня возникла проблема с viewcontroller У меня есть кнопка Далее и реализована кнопка push на этой кнопке, чтобы перейти к следующему виду, но мое приложение разбилось, когда я нажимаю кнопку «Далее» и получаю сообщение об ошибке.

Ошибка: Завершение приложения из-за неотображенного исключения «NSGenericException», причина: «Не удалось найти контроллер навигации для segue« nextSport ». Push segues может использоваться только тогда, когда управляющий источник управляется экземпляром UINavigationController. '

Вот Скриншот раскадровки:

Предыдущее изображение: добавлено enter image description here

Present (новое) изображение:

enter image description here

Это мой код:

  - (IBAction)fbLogin:(id)sender { 
        [FBSession openActiveSessionWithReadPermissions:@[@"email",@"user_location",@"user_birthday",@"user_hometown"] 
            allowLoginUI:YES 
           completionHandler:^(FBSession *session, FBSessionState state, NSError *error) { 

            switch (state) { 
             case FBSessionStateOpen: 
              [[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) { 

               if (error) { 

                NSLog(@"error:%@",error); 


               } 
               else 
               { 
                // retrive user's details at here as shown below 


                [[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *FBuser, NSError *error) { 
                 if (error) { 
                  // Handle error 
                 } 

                 else { 
                  NSString *userName = [FBuser name]; 
                  NSLog(@"username===%@",userName); 
                  NSLog(@"sesseion=%@",session); 
                                } 
                }]; 

                NSLog(@"FB user first name:%@",user.first_name); 
                userName=user.first_name; 
                NSLog(@"FB user last name:%@",user.last_name); 
                NSLog(@"FB user birthday:%@",user.birthday); 
                NSLog(@"FB user location:%@",user.location); 
                NSLog(@"FB user username:%@",user.username); 
                NSLog(@"FB user gender:%@",[user objectForKey:@"gender"]); 
                NSLog(@"email id:%@",[user objectForKey:@"email"]); 
                NSLog(@"location:%@", [NSString stringWithFormat:@"Location: %@\n\n", 
                     user.location[@"name"]]); 
                userImageURL = [NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?type=large", [user objectID]]; 
                NSLog(@"image=%@",userImageURL); 

               } 
               [self performSegueWithIdentifier:@"afterLogin" sender:nil]; 
              }]; 
              break; 
              } 
           } ]; 
         } 
+0

Контроллер представления источника (тот, у которого есть кнопка «next»), должен быть встроен в контроллер навигации, чтобы использовать push-сегмент – Paulw11

+0

. Пользователь имеет полностью изменил вопрос о проблеме сбоя при нажатии кнопки, на вопрос о том, как отобразить viewController после запроса на вход в facebook. Это два совершенно несвязанных вопроса, и их следует задавать отдельно, не меняя его и прося, чтобы нынешние люди также ответили на этот вопрос. –

+0

@Simon мои проблемы не решены. – Daljeet

ответ

1

Вы должны перенести место второго (навигационного контроллера) и третьего (контроллер, который имеет следующую кнопку) на контроллер изображения на изображении, потому что, когда вы нажимаете на следующую кнопку, для вас не требуется навигационный контроллер.

+0

Из изображения я не уверен, что он использует UITabbarController, если это так, я думаю, что UITabbarController должен быть встроен в контроллер навигации. И удалите другие навигационные контроллеры. – gabbler

+0

Прямо сейчас у меня не было никакого UITabbarController. – Daljeet

+0

@ Daljeet, навигационный контроллер управляет навигацией по иерархическому контенту, управляет отображаемыми в данный момент экранами с использованием стека навигации, который представлен массивом контроллеров представлений. поэтому, если вы хотите перемещаться вперед (нажмите от кнопки) или назад, вам необходимо встроить свой контроллер представления в контроллер навигации или нажать контроллер в стек навигации, прямо сейчас контроллер просмотра, у которого есть следующая кнопка, не включен стек навигации. – gabbler

2

Вы нажимаете на UINavigationController, но viewController, который предварительно формирует push, должен также находиться внутри UINavigationController. Поскольку ошибка предполагает, что не было UINavigationController для выполнения segue 'nextSport'

+0

Спасибо @ Simon, не могли бы вы объяснить мне больше о viewController, который преформирует push, также должен быть внутри UINavigationController, поэтому я могу взломать это. – Daljeet

+0

@ Daljeet Я не знаю, как еще объяснить это. Вы вызываете segue на viewController A, segue отправляется в UINavigationController, у которого есть viewController B как его корень. viewController A должен быть корнем UINavigationController и должен нажиматься непосредственно на B, а не нажимать на navController, который содержит B –

+0

благодаря @Simon, я редактировал свой вопрос с новым изображением своих раскадровки. Но теперь, что происходит, когда пользователь регистрируется в успешном режиме, его не удается перейти на следующий вид, который я хочу. Я также хочу, чтобы пользователь вошел в систему успешно и пришел в себя после закрытия приложения, которое должно быть в следующем представлении, а не на экране входа в систему. – Daljeet

Смежные вопросы