2012-04-26 11 views
1

私は既存のグループにABRecordRefを追加したいと思います。どのように動作していないいくつか。ここに私のコードは次のとおりです。iphoneのプログラムで既存のグループに連絡先を追加する

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

にメッセージを以下の取得、既存の​​グループでそれを保存しよう。 何か助けをいただければ幸いです。おかげ

+0

offtopic:今後のプロジェクトでは、EricaのABContactHelperを使用して素敵な連絡先インターフェイスを取得することができます:https://github.com/erica/ABContactHelper – CarlJ

答えて

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

またdocumentation中:(インスタンスアドレス 帳として知られている)

ABAddressBook不透明なタイプがアドレス帳にプログラミング・インタフェースを提供します-a 個人用の複数のアプリケーションで使用される集中データベース 人に関する情報

(だから、内部的に、このエラーが誤っsqliteのクエリに発生します。)

それはABGroupAddMemberまたはABAddressBookAddRecord(addressBookRef, group, &error);コールといくつかの問題があることを示しています。

問題は次のようなものです。ABAddressBookGetGroupWithRecordIDABAddressBookGetGroupWithRecordID関数を呼び出すと、すでにグループと人の参照があります。

ABAddressBookAddRecordは(persongroup)の両方で実行されたとき、それはaddressbookに追加されますが、ABGroupAddMember機能の時に、それがどの同じIDを持つpersongroupを持って呼び出すように、彼らのUniqueIDをid for person and group ref.)が更新されませんABGroupMembersテーブルに追加されます。

recordIdpersongroupをアドレス帳に追加した後(グループに追加する前に)印刷してください。 recordsIdsが更新されていない場合はそれが原因であり、新しいrecordIdの場合はrecordを取得する必要があります。また、新しいpersongroupがaddresbookに追加されているかどうかを確認してください。

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

+0

ありがとうございます。私は私のエラーを持っています。実際には、私は間違ったグループを結局送っています。 – iOSAppDev

関連する問題