【问题标题】:Add Contact to Existing Group programatically in iphone在 iphone 中以编程方式将联系人添加到现有组
【发布时间】:2012-04-26 12:52:42
【问题描述】:

我想将 ABRecordRef 添加到现有组。有些如何它不起作用。这是我的代码:

-(void)addUsers:(NSMutableArray*)users toGroupID:(ABRecordID)groupID {

    CFErrorRef error = NULL;
    ABAddressBookRef addressBookRef = ABAddressBookCreate();

   // Get Group 
    ABRecordRef group = ABAddressBookGetGroupWithRecordID(addressBookRef,groupID);

    for (User *user in users) {

        int recordId = user.uniqID;

        ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressBookRef,(ABRecordID)recordId);

        //add the new person to the record
        ABAddressBookAddRecord(addressBookRef, person, nil); 
        ABAddressBookSave(addressBookRef, &error);

        // add the group   
        ABAddressBookAddRecord(addressBookRef, group, &error); 
        ABAddressBookSave(addressBookRef, &error);

        // add the person to the group 
        ABGroupAddMember(group, person, &error);         
        ABAddressBookSave(addressBookRef, &error);

        //save the record
        ABAddressBookSave(addressBookRef, nil);

        if (!isMemberAdded) {
            [self showAlertWithTitle:@"Alert" andMessage:@"Some Error Occured While Adding User to Existing Group"];
        }
    }
    BOOL isMembersAddedToGroup = ABAddressBookSave(addressBookRef, nil); 
    if (isMembersAddedToGroup) {
        [self showAlertWithTitle:@"Alert" andMessage:@"Selected Members Added to Existing Group Successfully"];
    }
    else{
        [self showAlertWithTitle:@"Alert" andMessage:@"Some Error Occured While Adding User to Existing Group"];
    }
    CFRelease(addressBookRef);
}

每当我使用上述代码并尝试将其保存在现有组中时,我都会在控制台中收到以下消息

CPSqliteStatementPerform: constraint failed for INSERT INTO ABGroupMembers (group_id, member_type, member_id) VALUES (?, ?, ?);
CPSqliteStatementReset: columns group_id, member_type, member_id are not unique for INSERT INTO ABGroupMembers (group_id, member_type, member_id) VALUES (?, ?, ?);

我没有得到上面代码中缺少的内容。 感谢任何帮助。谢谢

【问题讨论】:

标签: ios addressbook abrecordref


【解决方案1】:

如果我们看到消息:

CPSqliteStatementPerform: constraint failed for INSERT INTO ABGroupMembers (group_id, member_type, member_id) VALUES (?, ?, ?);
CPSqliteStatementReset: columns group_id, member_type, member_id are not unique for INSERT INTO ABGroupMembers (group_id, member_type, member_id) VALUES (?, ?, ?);

也在documentation

ABAddressBook 不透明类型(其实例称为地址 书)提供了地址簿的编程接口——一个 多个应用程序使用的集中式数据库来存储个人信息 关于人的信息

(所以,在内部,这个错误是由于不正确的sqlite查询引起的。)

表示ABGroupAddMemberABAddressBookAddRecord(addressBookRef, group, &error);调用有问题。

问题可能是:当我们调用ABAddressBookGetGroupWithRecordIDABAddressBookGetGroupWithRecordID 函数时,我们已经有了组和个人引用。

现在,当为两者(persongroup)执行 ABAddressBookAddRecord 时,它会将它们添加到 addressbook不更新它们的 UniqueIds(id for person and group ref.) 所以在ABGroupAddMember 函数调用的时间它有 persongroup 具有相同的 id 被添加到 ABGroupMembers 表中。

请在将persongroup 添加到通讯簿之后(以及在将它们添加到组之前)尝试打印recordId。如果recordsIds 没有更新,那么这就是原因,您需要获取record 以获得新的recordId。还要检查新的persongroup 是否被添加到地址簿。

*目前,我无法通过 mac 访问来验证我的建议/答案。

【讨论】:

  • 感谢您的信息。我得到了我的错误。实际上我在功能中发送了错误的组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多