为了练习MVC(并且还松散地遵循教程)我已经放置了一个方法,该方法将地址簿联系人导入到一个名为Model.h
的单独数据类中,该数据类继承自NSObject
。它不是UIViewController
,而是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;
}
答案 0 :(得分:1)
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main"
bundle: nil];
SlowViewController*view=[mainStoryboard instantiateViewControllerWithIdentifier:@"newVC"];
[self.navigationController pushViewController:view animated:YES];
制作视图控制器的正确实例,谢谢