1
MVCを練習するために(また、チュートリアルにゆるやかに)、NSObject
を継承するModel.h
という別のデータクラスにアドレス帳の連絡先をインポートするメソッドを配置しました。 UIViewController
ではなく、むしろNSObject
です。IOS:NSObjectからストーリーボードにアクセス
私が遭遇した問題は、連絡先へのアクセスが拒否された場合、別のView Controllerにジャンプしたいということです。 NSObject
は明らかにstoryboard
へのアクセスを提供していません。
何が起こるかを処理するView Controllerとの通信は現在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;
}