2014-01-30 99 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模擬器 - >重置內容和設置,以便你能夠模擬事件。

相關問題