1

アドレス帳からレコードを取得する必要があります。そのために ABPeoplePickerNavigationController を使用しています。レコードをフェッチしている間、レコードが存在するかどうかを確認するためのチェック条件を設定しています。たとえば、名前があることを確認するには、次のコードを使用しています

NSString *fname;
CFTypeRef fnameProperty = ABRecordCopyValue(person, kABPersonFirstNameProperty);
if (ABRecordCopyValue(person, kABPersonFirstNameProperty)) {
    fname = (__bridge NSString*)fnameProperty;
}
else{
    fname = @"";
}

このコードは、kABPersonFirstNameProperty に対して完全に機能します。

しかし、次のコードを使用して電子メールのプロパティを確認しているとき

ABMultiValueRef emailProperty = ABRecordCopyValue(person, kABPersonEmailProperty);
NSLog(@"%@",emailProperty);
NSString *email;
if (ABRecordCopyValue(person, kABPersonEmailProperty)) {
    email = (__bridge NSString*)ABMultiValueCopyValueAtIndex(emailProperty, 0);
}
else {
   email = @"";
}

kABPersonEmailProperty が nil の場合にアプリがクラッシュする (個人用に保存された電子メール プロパティがない)

誰かがなぜこれが起こっているのか説明できますか?

ありがとう

4

1 に答える 1

4

これが私の作業バージョンです。これが機能するかどうかを確認してください。

//Email
NSString* email = nil;
ABMultiValueRef emailNum = ABRecordCopyValue(person,
                                                 kABPersonEmailProperty);
if (ABMultiValueGetCount(emailNum) > 0) {
    email = (__bridge_transfer NSString*)
    ABMultiValueCopyValueAtIndex(emailNum, 0);
} else {
    email = @"";
}
于 2012-12-11T10:28:50.620 に答える