2014-01-24 2 views
1

Mac 용 사용자 정의 "연락처"구현을하고 있는데 IOSOS에서 ABSource와 동등한 동작을 얻을 수 없다는 것을 알았습니다. 예를 들어 Mac 연락처 프로그램에서 iCloud 소스와 그 아래 그룹을 볼 수 있습니다. 그룹에 대해 ABAddressBook을 질의 할 때, 내가 돌아 오는 유일한 것은 "제목없는 그룹"입니다 (아래 참조). 결국 궁금한 점은 비슷한 UI를 만들 수 있도록 내 ABGroup 그룹 (제목없는 그룹)에서 소스 (iCloud)를 가져 오는 방법입니다. Mac에서이 기능이 누락 된 것 같습니다. 나는 그것을 간과하기를 바라고 있습니다.ABAddressBook/ABSource for OS X

http://i.stack.imgur.com/RHIll.png

답변

0

올바른 것을 얻었습니다.

보유한 유일한 그룹은 "제목 없음 그룹"입니다. "모든 iCloud"는 ABGroup이 아니지만 이 아닌 모든 연락처에는이 그룹으로 설정되어 있습니다.

같은 UI를 복제하려는 경우, 당신은 다음을 수행 할 수

// get your addressbook reference first 

// Create mutable dictionary for holding 
NSMutableDictionary *sourceDisplayDictionary = [NSMutableDictionary dictionary]; 
NSArray *sources = (__bridge NSArray *)(ABAddressBookCopyArrayOfAllSources(addressbook)); 

// Cannot use "ABRecordRef" in fast enumeration 
for (id source in sources) { 
    ABRecordRef sourceRef = (__bridge ABRecordRef)(source); 
    NSString *sourceName = (__bridge NSString *)(ABRecordCopyValue(sourceRef, kABSourceNameProperty)); 

    // The "All" groups aren't real groups, they're placeholders for ABPersons without a group 
    NSString *beginningGroup = [@"All " stringByAppendingString:sourceName]; 
    NSMutableArray *groupNames = [NSMutableArray arrayWithObject:beginningGroup]; 
    NSArray *groups = (__bridge NSArray *)(ABAddressBookCopyArrayOfAllGroupsInSource(addressbook, sourceRef)); 

    // Again, iterate over the array of groups _inside_ the source to build the subarray array 
    for (id group in groups) { 
     ABRecordRef groupRef = (__bridge ABRecordRef)(group); 
     NSString *groupName = (__bridge NSString *)(ABRecordCopyValue(groupRef, kABGroupNameProperty)); 
     [groupNames addObject:groupName]; 
    } 

    // Add the source name to the dictionary 
    sourceDisplayDictionary[sourceName] = [groupNames copy]; 
} 

NSDictionary *sourceDictionary = [sourceDisplayDictionary copy]; 

/* 
{ 
    "iCloud": 
    [ 
    "All iCloud", 
    "untitled group" 
    ] 
} 
*/