2016-04-14 7 views
1

В попытке практиковать MVC (а также свободно следовать учебнику) я разместил метод, который импортирует контакты адресной книги в отдельный класс данных, известный как Model.h, который наследуется от NSObject. Это не UIViewController, а скорее NSObject.IOS: Access Storyboard от NSObject

Проблема, с которой я столкнулся, заключается в том, что если доступ к контактам был отклонен, я хотел бы перейти к другому контроллеру представления. И NSObject, очевидно, не дает вам доступа к storyboard.

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

Может кто-нибудь предложить способ разрешить доступ к раскадровке от NSObject или, в качестве альтернативы, связаться с NSObject с активным UIViewController, чтобы этот доступ был отклонен.

- (void)fetchAddressBookContacts 
{ 
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL); 

    switch (ABAddressBookGetAuthorizationStatus()) { 

     case kABAuthorizationStatusAuthorized: 
     { 
      NSLog(@"User has already granted access to the Address Book"); 
      [self extractContactsFromAddressBookAlt]; 
      break; 
     } 
     case kABAuthorizationStatusDenied: 
     { 
      NSLog(@"User has denied access to the Address Book"); 

      dispatch_async(dispatch_get_main_queue(), ^{ 
       [self gotoNewVC];//does not work 
      }); 
      break; 
     } 
    } 
    if (addressBook) { 
     CFRelease(addressBook);} 
} 
//following is not getting called from NSObject 
-(void) gotoNewVC { 
      UIViewController* rootController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"newVC"]; 

     UINavigationController* navigation = [[UINavigationController alloc] initWithRootViewController:rootController]; 
     self.window.rootViewController = navigation; 
} 

ответ

1
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" 
                 bundle: nil]; 
SlowViewController*view=[mainStoryboard instantiateViewControllerWithIdentifier:@"newVC"]; 
[self.navigationController pushViewController:view animated:YES]; 

сделать правильный экземпляр вида контроллера, спасибо

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