Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone ABAddressBookCreate(),ABAddressBookGetGroupCount。。。“返回”;0x00000000<;零>&引用;?_Iphone_Objective C_Ios_Ios5_Abaddressbook - Fatal编程技术网

Iphone ABAddressBookCreate(),ABAddressBookGetGroupCount。。。“返回”;0x00000000<;零>&引用;?

Iphone ABAddressBookCreate(),ABAddressBookGetGroupCount。。。“返回”;0x00000000<;零>&引用;?,iphone,objective-c,ios,ios5,abaddressbook,Iphone,Objective C,Ios,Ios5,Abaddressbook,我试图获取组名,但在多次调用此方法“由用户重新加载联系人”后,它会给出nil值和以下错误 -(void) getGroupsName { [groupsName removeAllObjects]; //address book object to interact with iPhone contacts. ABAddressBookRef addressbook = ABAddressBookCreate(); //ge

我试图获取组名,但在多次调用此方法“由用户重新加载联系人”后,它会给出
nil
值和以下错误

-(void) getGroupsName
    {
        [groupsName removeAllObjects];
        //address book object to interact with iPhone contacts.
        ABAddressBookRef addressbook = ABAddressBookCreate();
        //get groups count
        CFIndex groupsCount          = ABAddressBookGetGroupCount(addressbook);
        //get all available groups as array
        CFArrayRef allGroups         = ABAddressBookCopyArrayOfAllGroups(addressbook);

        for (int i = 0; i<groupsCount; i++) {
            //get group of index=i from groups array
            ABRecordRef group = CFArrayGetValueAtIndex(allGroups, i);
            //get group name, I use __bridge_transfer to transfer from C to objective-c.
            [groupsName addObject:(__bridge_transfer NSString*)ABRecordCopyCompositeName(group)];

        }
        CFRelease(allGroups);
        CFRelease(addressbook);
    }
//////////////////////////////////////////////////////////////

    warning: Could not compile statement PRAGMA journal_mode = wal;: unable to open database file error 14 creating properties table: unable to open database file warning: Could not compile statement SELECT value FROM _SqliteDatabaseProperties WHERE key = ?;: unable to open database file warning: Could not compile statement SELECT value FROM _SqliteDatabaseProperties WHERE key = ?;: unable to open database file warning: Could not compile statement SELECT value FROM
_SqliteDatabaseProperties WHERE key = ?;: unable to open database file warning: Could not compile statement SELECT ROWID, First, Last, Middle, NULL, NULL, NULL, Organization, NULL, NULL, Kind, NULL, NULL, Nickname, Prefix, Suffix, FirstSort, LastSort, CreationDate, ModificationDate, CompositeNameFallback, NULL, StoreID, NULL, FirstSortSection, LastSortSection, FirstSortLanguageIndex, LastSortLanguageIndex, NULL, NULL, NULL, PersonLink, NULL, IsPreferredName FROM ABPerson;: unable to open database file warning: Could not compile statement SELECT ROWID, First, Last, Middle, NULL, NULL, NULL, Organization, NULL, NULL, Kind, NULL, NULL, Nickname, Prefix, Suffix, FirstSort, LastSort, CreationDate, ModificationDate, CompositeNameFallback, NULL, StoreID, NULL, FirstSortSection, LastSortSection, FirstSortLanguageIndex, LastSortLanguageIndex, NULL, NULL, NULL, PersonLink, NULL, IsPreferredName FROM ABPerson;: unable to open database file warning: Could not compile statement INSERT OR REPLACE INTO _SqliteDatabaseProperties VALUES (?, ?);: unable to open database file warning: Could not compile statement SELECT value FROM
_SqliteDatabaseProperties WHERE key = ?;: unable to open database file warning: Could not compile statement INSERT OR REPLACE INTO
_SqliteDatabaseProperties VALUES (?, ?);: unable to open database file warning: Could not compile statement SELECT value FROM
_SqliteDatabaseProperties WHERE key = ?;: unable to open database file warning: Could not compile statement SELECT value FROM
_SqliteDatabaseProperties WHERE key = ?;: unable to open database file warning: Could not compile statement SELECT ROWID FROM ABGroup;: unable to open database file warning: Could not compile statement SELECT ROWID, Name, ExternalIdentifier, StoreID, NULL, NULL, NULL FROM ABGroup;: unable to open database file
-(void)getGroupsName
{
[组名称删除所有对象];
//用于与iPhone联系人交互的通讯簿对象。
ABAddressBookRef addressbook=ABAddressBookCreate();
//获取组计数
CFIndex groupscont=ABAddressBookGetGroupCount(地址簿);
//将所有可用组作为数组获取
CFArrayRef allGroups=abAddressBookCopyArrayFallGroups(addressbook);

对于(int i=0;i
ABAddressBookCreate
已在iOS6中声明。使用
ABAddressBookCreateWithOptions
,如果您无权访问通讯簿,它将返回一个
CFErrorRef
对象。

正如您必须在iOS6中使用ABAddressBookCreateWithOptions的法律所指出的那样。 如果([[[UIDevice currentDevice]systemVersion]floatValue]>5.1){

另一件事是你初始化了吗,我在什么地方

除此之外,您是否使用ABExternalChangeCallBack获取通讯簿更改通知

我认为你应该把组码放在同一个模块中,在那里你可以访问联系人。
(如果这对您没有帮助,请澄清!)

为什么您不尝试使用以下方法来减少创建和访问
ABAddressBookRef
的时间:

void ABAddressBookRegisterExternalChangeCallback (
   ABAddressBookRef addressBook,
   ABExternalChangeCallback callback,
   void *context
);
这允许您的应用程序知道外部何时修改通讯簿。并让您知道您需要重新访问通讯簿


对于你的方法,你发布它也是一样的,每次你调用它都会创建一个新的对象,新的地址簿访问权限

仍然会给我同样的问题,在多次调用该方法后,它会返回null,所以我想从sdk中它自己??你有没有尝试查看CFErrorRef?就像你看到的那样,它是警告而不是错误,所以无法记录它或者为&error做任何精简请查看@rmaddy这不是同一种情况,我的代码在第一次和每次都会获得所有联系,但是,当用户单击它超过20次时,我有重新加载按钮,它会在上面返回错误。对不起,我没有意识到您只是在多次迭代后才遇到问题。首先,我使用了一个ExternalChangeCallback,这给出了“当用户更新时,应用程序得到通知。如果发生多次,则重新访问通讯簿”。第二:对于“获取联系人”,如果我多次请求它,它将崩溃或返回给我零值。因此这没有帮助:(原则上正确,但是-1表示获取系统版本的floatValue。这不是检查API可用性的推荐方法。thx它对我有用,目前没有崩溃和SQL:)
void ABAddressBookRegisterExternalChangeCallback (
   ABAddressBookRef addressBook,
   ABExternalChangeCallback callback,
   void *context
);