2012-05-08 14 views
6

Làm cách nào để lấy tên của nguồn ABAddressBook để hiển thị? (Tôi biết enums kABSourceTypeLocal, kABSourceTypeExchange ...)ABAddressBook ABSourceName

tôi không có nghĩa là nguồn-type-tên mà bạn nhận được với ABRecordCopyValue (nguồn, ABSourceNameProperty), nhưng tên thật mà được thể hiện trong Apple Danh bạ-Ứng dụng dưới dạng mục bảng, ví dụ: "Exchange Google" hoặc "iCloud"

+0

Cùng một vấn đề về phía tôi. Bạn đã có thể lấy tên? –

+0

Bất kỳ thành công nào? Cùng một vấn đề ở đây quá. –

Trả lời

2

Nếu bạn xem ABSource Reference, bạn có thể thấy rằng chúng có thuộc tính được gọi là kABSourceNameProperty có chứa "tên nguồn" . Dưới đây là cách bạn sẽ nhận được tất cả các tên nguồn:

NSMutableArray *sourceNames = [[NSMutableArray alloc] init]; 
ABAddressBookRef addressBook = ABAddressBookCreate(); 
CFArrayRef sourcesArray = ABAddressBookCopyArrayOfAllSources(addressBook); 

for (CFIndex i = 0; i < CFArrayGetCount(sourcesArray); i++) { 
    ABRecordRef source = (ABRecordRef)CFArrayGetValueAtIndex(sourcesArray, i); 
    CFStringRef sourceName = (CFStringRef)ABRecordCopyValue(ABRecordGetRecordID(source, kABSourceNameProperty); 

    if(sourceName){ 
     [sourceNames addObject: (__bridge_transfer NSString *)sourceName]; 
    } 
} 

CFRelease(sourcesArray); 
CFRelease(addressBook); 

Hy vọng điều này sẽ hữu ích!

+0

Thao tác này không cung cấp tên nguồn giống với giao diện người dùng trong danh bạ của Apple. Đối với tôi, Apple cho thấy "Exchange", "Facebook" và "iCloud". Khi câu trả lời ở trên cho "Danh bạ" (CNContainerTypeExchange), "Thẻ" (CNContainerTypeCardDAV) và "" (CNContainerTypeCardDAV) –

+0

@MattToohey - Câu trả lời này đã được đăng hơn ba năm trước. Tôi không cập nhật những thay đổi mới nhất của Apple đối với API sổ địa chỉ của họ vì vậy điều này rất có thể sẽ bị hỏng/có kết quả không mong muốn nếu bạn chạy ngay bây giờ. – pasawaya