gpt4 book ai didi

IOS - 获取联系人电话用于通讯录

转载 作者:行者123 更新时间:2023-12-01 16:47:37 25 4
gpt4 key购买 nike

我有一部运行 ios 6.0.1 的设备电话,我想在我的设备中获取所有联系人。我尝试在 iphone 上使用 IOS 5.1、6.1.3,它工作正常。不幸的是,当它运行 ios 6.0.1 时,数据为空

这是我的代码:

if ([[[UIDevice currentDevice] systemVersion] floatValue] > 5.2) {

    ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL);
if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined)
{
ABAddressBookRequestAccessWithCompletion(addressBookRef,
^(bool granted, CFErrorRef error) {
if (granted)
[self loadContact];

});
}
else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized)
{
[self loadContact];
}
}
else
{
[self loadContact];
}

-(void) loadContact {

ABAddressBookRef addressBooks = ABAddressBookCreate();
allPeople = (__bridge NSArray *)(ABAddressBookCopyArrayOfAllPeople(addressBooks));
peopleCount = ABAddressBookGetPersonCount(addressBooks); }


我不知道,为什么它在 ios 6.0.1 上不起作用

我找到了 this link ,然后做,但我的设备没有数据。

你能帮我解决这个问题吗?

最佳答案

您的代码中最大的问题是您需要将引用“addressBookRef”传递给您的“loadContact”方法。 “ABAddressBookCreate”不适用于 iOS6 - 您需要使用由 ABAddressBookRequestAccessWithCompletion 创建的那个。

顺便提一句。与其检查 iOS 版本,不如使用它来确定您是否需要请求权限。这是我正在使用的代码 - 随意使用它:

-(BOOL)isABAddressBookCreateWithOptionsAvailable {
return &ABAddressBookCreateWithOptions != NULL;
}

- (void) importContactsFromAddressBook
{
ABAddressBookRef addressBook;
if ([self isABAddressBookCreateWithOptionsAvailable]) {
CFErrorRef error = nil;
addressBook = ABAddressBookCreateWithOptions(NULL,&error);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
// callback can occur in background, address book must be accessed on thread it was created on
if (error) {
[self.delegate addressBookHelperError:self];
} else if (!granted) {
[self.delegate addressBookHelperDeniedAcess:self];
AddressBookUpdated(addressBook, nil, self);
} else {
// access granted
AddressBookUpdated(addressBook, nil, self);
CFRelease(addressBook);
}
});
} else {
// iOS 4/5
addressBook = ABAddressBookCreate();
AddressBookUpdated(addressBook, NULL, self);
CFRelease(addressBook);
}
}

void AddressBookUpdated(ABAddressBookRef addressBook, CFDictionaryRef info, void *context)
{
NSMutableArray* addressBookContacts = [NSMutableArray array];

//import from address book
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople( addressBook );
CFIndex nPeople = ABAddressBookGetPersonCount( addressBook );
[helper.delegate performSelectorOnMainThread:@selector(didLoadList:)
withObject:[NSNumber numberWithInt:nPeople]
waitUntilDone:YES];
if(allPeople) CFRelease(allPeople);
[helper.delegate performSelectorOnMainThread:@selector(didComplete:)
withObject:addressBookContacts
waitUntilDone:YES];
}

我将这些功能封装到类中,委托(delegate)是:
@protocol ContactImporterProgressViewDelegate <NSObject>
- (void) didLoadList:(NSNumber*) totalItems;
- (void) updateProgress:(NSNumber*) progress;
- (void) didComplete:(NSArray*) contactsImported;
@end

@property (nonatomic, assign) NSObject <ContactImporterProgressViewDelegate>* delegate;

要使用它,我建议在另一个线程上调用它以不阻塞 UI 并显示进度(当您有 5000 个条目时需要一段时间):
ContactImporter* importer = [[ContactImporter alloc] init];
importer.delegate = self;
NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease];
NSInvocationOperation *oper = [[[NSInvocationOperation alloc] initWithTarget:importer
selector:@selector(importContactsFromAddressBook)
object:nil] autorelease];
[queue addOperation:oper];
[importer release];

关于IOS - 获取联系人电话用于通讯录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18713193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com