2016-04-14 147 views
1

为了努力练习MVC(也松散地遵循教程),我已经放置了一个方法,将地址簿联系人导入从NSObject继承的,名为Model.h的单独数据类中。它不是UIViewController而是NSObjectIOS:访问来自NSObject的故事板

我遇到的问题是,如果访问联系人被拒绝,我想跳转到另一个视图控制器。而NSObject显然不会给你访问storyboard

模型和处理所发生事件的视图控制器之间的通信目前通过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]; 

使视图控制器的正确的实例,感谢