支持 iOS 6 的通讯录访问功能

| 分类 文档  | 标签 iOS  编程 

老的 iOS 的程序在 iOS 6 正式版之前能正常访问通讯录功能的,包括在 iOS 6 Beta 4 中,不用做任何改变,只是多了一个UI确认框而已。但在正式版的 iOS 6 中,是无法读取读取到的,需要程序主动(Beta 4 是系统自动发起)申请用户确认后才能读取。这次被苹果摆了一刀……

不过,稍微改进一下代码,可以在不改变原有代码结构的基础上,尽快实现这个功能,下面是代码,直接替换 ABAddressBookCreate 就行了:

        //
        ABAddressBookRef ContactCenter::MyAddressBookCreate()
        {
            if (UIUtil::SystemVersion() < 6)
            {
                return ABAddressBookCreate();
            }

            ABAddressBookRef book = ABAddressBookCreateWithOptions(NULL, NULL);
            if (ABAddressBookGetAuthorizationStatus() != kABAuthorizationStatusAuthorized)
            {
                static NSCondition *_waiting;
                _waiting = [[NSCondition alloc] init];

                ABAddressBookRequestAccessWithCompletion(book, ^(bool granted, CFErrorRef error) {
                    //[_waiting lock];
                    [_waiting signal];
                    //[_waiting unlock];
                });

                //[_waiting lock];
                [_waiting wait];
                //[_waiting unlock];
                [_waiting release];
                _waiting = nil;
            }
            return book;
        }

上一篇     下一篇