Macos 适用于OS X的地址簿/绝对资源

Macos 适用于OS X的地址簿/绝对资源,macos,cocoa,abaddressbook,Macos,Cocoa,Abaddressbook,我正在为Mac开发一个定制的“联系人”实现,我发现我无法从iOS中获得与Absoluce相同的行为。例如,在Mac contacts应用程序中,我可以看到我的iCloud源及其下面的组。当我查询地址簿中的组时,我得到的唯一结果是“无标题组”(见下文)。所以最终,我要问的是如何从我的ABGroup(无标题组)中获取源(iCloud),以便构建类似的UI。Mac似乎缺少这种功能——我希望我只是忽略了它 你得到的是正确的 你唯一拥有的群体是“无标题群体”。“所有iCloud”不是ABGroup,而是所

我正在为Mac开发一个定制的“联系人”实现,我发现我无法从iOS中获得与Absoluce相同的行为。例如,在Mac contacts应用程序中,我可以看到我的iCloud源及其下面的组。当我查询地址簿中的组时,我得到的唯一结果是“无标题组”(见下文)。所以最终,我要问的是如何从我的ABGroup(无标题组)中获取源(iCloud),以便构建类似的UI。Mac似乎缺少这种功能——我希望我只是忽略了它


你得到的是正确的

你唯一拥有的群体是“无标题群体”。“所有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"
   ]
 }
 */