我有以下代码片段,这些代码片段通过使用block来获取联系人:
if (&ABAddressBookCreateWithOptions != NULL) {
CFErrorRef error = nil;
addressBook = ABAddressBookCreateWithOptions(NULL, &error);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
dispatch_sync(dispatch_get_main_queue(), ^{
if (error) {
//...
} else if (!granted) {
//...
} else {
// access granted
//...
}
});
});
它同时适用于
7.1.2
和8.1.3
版本。但是,当我尝试将
dispatch_get_main_queue
更改为dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0)
时,它可以在8.1.3
上运行,但会在7.1.2
上使崩溃if (&ABAddressBookCreateWithOptions != NULL) {
CFErrorRef error = nil;
addressBook = ABAddressBookCreateWithOptions(NULL, &error);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
dispatch_sync(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0), ^{ // BAD ACCESS
if (error) {
//...
} else if (!granted) {
//...
} else {
// access granted
//...
}
});
});
最佳答案
QOS_CLASS_
标识符是iOS 8中引入的。如果要支持iOS 7,则需要使用DISPATCH_QUEUE_PRIORITY_
标识符。