В попытке практиковать 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;
}