5
有沒有辦法從iPhone地址簿中找到某個人的特定類型的電子郵件地址?我知道如何獲得一個人的所有電子郵件地址,而不知道如何識別它是什麼類型的電子郵件地址(「家庭」,「工作」等)......也不是(這可能更可取),這是一種直接訪問該地址的方法,無需遍歷所有地址。在iPhone地址簿中查找某個人的「工作」電子郵件地址?
謝謝。
有沒有辦法從iPhone地址簿中找到某個人的特定類型的電子郵件地址?我知道如何獲得一個人的所有電子郵件地址,而不知道如何識別它是什麼類型的電子郵件地址(「家庭」,「工作」等)......也不是(這可能更可取),這是一種直接訪問該地址的方法,無需遍歷所有地址。在iPhone地址簿中查找某個人的「工作」電子郵件地址?
謝謝。
使用ABMultiValueCopyLabelAtIndex檢查kABWorkLabel的標籤。
舉例來說,如果你有一個ABRecordRef命名爲「人」,這個代碼將設置爲「EMAILADDRESS」單一的NSString:
// Email address (if only one, use it; otherwise, use the first work email address)
CFStringRef value, label;
ABMutableMultiValueRef multi = ABRecordCopyValue(person, kABPersonEmailProperty);
CFIndex count = ABMultiValueGetCount(multi);
if (count == 1) {
value = ABMultiValueCopyValueAtIndex(multi, 0);
emailAddress = (NSString*)value;
[emailAddress retain];
CFRelease(value);
} else {
for (CFIndex i = 0; i < count; i++) {
label = ABMultiValueCopyLabelAtIndex(multi, i);
value = ABMultiValueCopyValueAtIndex(multi, i);
// check for Work e-mail label
if (label && CFStringCompare(label, kABWorkLabel, 0) == 0) {
emailAddress = (NSString*)value;
[emailAddress retain];
break;
}
CFRelease(label);
CFRelease(value);
}
}
CFRelease(multi);
剛剛凝結的響應,祕密在這裏是得到了kABWorkLabel一個工作地址。請注意,儘管您的代碼存在潛在的泄漏問題,因爲可能會有多個工作電子郵件地址,所以應該在設置之前發佈emailAddress,或者您需要跳出循環,或者(更好)您需要吐出工作電子郵件地址列表。 – 2010-01-22 20:56:22
好點。我從我的應用程序中獲取了這個信息,實際上我正在設置一個屬性(不泄漏),我只關心一個屬性。 – gerry3 2010-01-22 20:58:31
如果設置了多個電子郵件地址但未分配工作標籤,則上述代碼將失敗。如果設置了多個地址但標籤丟失,它也會失敗,因爲CFStringCompare會崩潰。不過謝謝發佈! – 2012-04-20 10:05:28