我在应用商店上的应用程序正在访问iPhone联系人,用户在iOS 6上下载后,它无法访问iPhone联系人,而它在iOS 5上运行良好问题是苹果在iOS 6中放置的新隐私设置。因此,搜索后,我发现我必须在代码中执行以下操作才能访问用户联系人:
//in order to test addressbook availability we have to attempt to create an addressbook instance using ABAddressBookCreateWithOptions
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 60000
// Request authorization to Address Book
ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL);
if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
ABAddressBookRequestAccessWithCompletion(addressBookRef,
^(bool granted, CFErrorRef error) {
if (granted)
[self loadContacts];
});
} else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {
// The user has previously given access, add the contact
[self loadContact];
} else {
}
#endif //end iOS6+
//ABAddressBookCreateWithOptions not available or succeeded. return YES;
[self loadContacts];
我现在的问题是在设备上调试时,警报没有显示,我不知道为什么?我知道上面的代码应该可以正常工作,但只有在应用程序提交到应用商店时,但我想在提交前在调试模式下进行测试?有什么建议吗?
感谢您的支持。谢谢。
我已经设法解决了它这是稍作修改后的新代码:
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 60000
__block MyClassType *controller = self;
// Request authorization to Address Book
ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL);
if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
ABAddressBookRequestAccessWithCompletion(addressBookRef,
^(bool granted, CFErrorRef error) {
if (granted)
[controller loadContacts];
});
} else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {
// The user has previously given access, add the contact
[self loadContacts];
} else {
}
#else
[self loadContacts];
#endif
能够测试它的关键是从设置>>常规>>重置>>重置位置和隐私中重置隐私和位置设置
它对我来说很好用。
重置位置和隐私对我不起作用。
我的授权状态始终为 kABAuthorizationStatusAuthorized,无论我是否清除模拟器设置,然后重置位置和隐私。