1

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 (?, ?, ?);

上記のコードで欠落しているものが得られません。どんな助けでも大歓迎です。ありがとう

4

1 に答える 1

3

メッセージが表示された場合:

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 (?, ?, ?);

ドキュメントにも:

ABAddressBook不透明(OPAQUE)型(インスタンスはアドレスブックと呼ばれます)は、アドレスブックへのプログラミングインターフェイスを提供します。これは、複数のアプリケーションが人の個人情報を保存するために使用する一元化されたデータベースです。

(したがって、内部的には、このエラーは不正なsqliteクエリが原因で発生します。)

ABGroupAddMemberまたはABAddressBookAddRecord(addressBookRef, group, &error);呼び出しに問題があることを示します。

ABAddressBookGetGroupWithRecordID問題は次のようになります。電話をかけて機能するときに、グループと個人の参照がすでにありABAddressBookGetGroupWithRecordIDます。

ここで、が(と)ABAddressBookAddRecordの両方に対して実行されると、UniqueIds( )に追加されますが、更新されません。したがって、関数呼び出し時に、テーブルに追加された同じIDを使用し ます。persongroupaddressbookid for person and group ref.ABGroupAddMemberpersongroupABGroupMembers

名簿に追加した後(およびグループに追加する前)に印刷recordIdしてみてください。更新されていない場合はそれが原因であり、 newをフェッチする必要があります。また、新しいとがaddresbookに追加されているかどうかも確認してください。persongrouprecordsIdsrecordrecordIdpersongroup

*現在、提案/回答を確認するためのMacアクセスは行っていません。

于 2012-04-27T18:37:58.297 に答える