2014-01-30 49 views
1

我使用下面的代码,我的应用程序不要求在iOS 6,同时允许在iOS 7及以上的版本,它要求联系许可访问。在iOS 6上,它也不会在隐私设置中显示应用。我读过一些其他的线程,但没有找到任何解决方案。应用不要求联系访问权限在iOS 6

App crashed in iOS 6 when user changes Contacts access permissions

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) { 

    __block CDNDeviceContact *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 [controller doAlertForContact]; 
               }); 
    } else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) { 

     // The user has previously given access, add the contact 
     [self loadContacts]; 
    } else { 
     [controller doAlertForContact]; 
    } 
    if (addressBookRef) CFRelease(addressBookRef); 
} 

回答

0

你不需要SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO,你也不需要创建一个ABAddressBookRef

对于我来说,这就像一个魅力的作品:

if (ABAddressBookGetAuthorizationStatus) { 
    switch (ABAddressBookGetAuthorizationStatus()) { 
     case kABAuthorizationStatusNotDetermined:{ 
      ABAddressBookRequestAccessWithCompletion(self.addressBook, ^(bool granted, CFErrorRef error) { 
       self.addContactButton.enabled = granted; 
       if (granted) { 
        // granted 
       } else { 
        // User denied access 
       }}); 
     } break; 

     case kABAuthorizationStatusDenied: break; 
     case kABAuthorizationStatusAuthorized: break; 
     default: break; 
    } 
} 
+2

它来自self.addressbook而不创建addressBookRef。 –

2

如果用户先前已经提出该请求得到许可,也不会再次显示。根据documentation

用户只在第一次请求访问时被要求权限。稍后的调用使用用户授予的权限。

如果在模拟器中测试,我建议你去iOS模拟器 - >重置内容和设置,以便你能够模拟事件。

相关问题