IOS:来自NSObject的Access Storyboard

时间:2016-04-14 11:33:07

标签: ios storyboard

为了练习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;
}

1 个答案:

答案 0 :(得分:1)

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

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