私は現在、ユーザーがアプリ内の連絡先の詳細 (主に番号) を変更できるようにするアプリを作成しており、これらの変更はアドレス帳に直接反映される必要があります。
インターネットで徹底的に検索しましたが、見つかったすべての例は、連絡先を読み込むか、新しい連絡先を追加するものでしたが、既存の連絡先を変更するものは何もありませんでした.
また、複数の番号が保存されている場合に、単一の連絡先のすべての電話番号のリストを取得するにはどうすればよいですか。
私は現在、ユーザーがアプリ内の連絡先の詳細 (主に番号) を変更できるようにするアプリを作成しており、これらの変更はアドレス帳に直接反映される必要があります。
インターネットで徹底的に検索しましたが、見つかったすべての例は、連絡先を読み込むか、新しい連絡先を追加するものでしたが、既存の連絡先を変更するものは何もありませんでした.
また、複数の番号が保存されている場合に、単一の連絡先のすべての電話番号のリストを取得するにはどうすればよいですか。
ユーザーが詳細を直接編集できるようにするには、個人レコードの表示と編集に関するAppleのドキュメントを参照してください。その最初のセクションには、「ABPersonViewControllerDelegateプロトコルを採用する必要があるデリゲートを設定します。ユーザーがレコードを編集できるようにするには、allowsEditingをYESに設定します。」
例えば:
ABPersonViewController *personViewController = [[ABPersonViewController alloc] init];
personViewController.personViewDelegate = self;
personViewController.allowsEditing = YES;
設定allowsEditingを除いて、コードは編集せずに人の詳細を表示するために必要なコードとまったく同じになります。(このコードは、アドレス帳からの連絡先の削除に関するより完全な例を表示するこの回答から抽出されました。)
しかし、あなたのタイトルはプログラムでそうすることを指しているようです。AppleのiOS用アドレス帳プログラミングガイドには、「アドレス帳データベースは最終的にユーザーが所有するため、アプリケーションは予期しない変更を加えないように注意する必要があります。通常、変更はユーザーが開始または確認する必要があります」と述べています。
ただし、それは可能です。次の例は、そのドキュメントのp.17に記載されています。
ABRecordRef aRecord = ABPersonCreate();
CFErrorRef anError = NULL;
bool didSet;
didSet = ABRecordSetValue(aRecord, kABPersonFirstNameProperty, CFSTR("Katie"), &anError);
if (!didSet) {/* Handle error here. */}
didSet = ABRecordSetValue(aRecord, kABPersonLastNameProperty, CFSTR("Bell"), &anError);
if (!didSet) {/* Handle error here. */}
CFStringRef firstName, lastName;
firstName = ABRecordCopyValue(aRecord, kABPersonFirstNameProperty);
lastName = ABRecordCopyValue(aRecord, kABPersonLastNameProperty);
/* ... Do something with firstName and lastName. ... */
CFRelease(aRecord);
CFRelease(firstName);
CFRelease(lastName);