ABAddressBook/ABSource for OS X



我正在为Mac进行自定义"联系人"实现,我发现我无法从iOS中获得同等的Assource行为。例如,在Mac Contacts应用程序中,我可以看到我的iCloud源,并且它的组下方是。当我查询Abaddress Book的小组时,我唯一回来的是"无标题组"(见下文)。因此,最终,我要问的是如何从Abgroup组(无标题组)中获取源(iCloud),以便我可以构建类似的UI。Mac中似乎缺少此功能 - 我希望我只是忽略了它。

https://i.stack.imgur.com/rhill.png

您得到的是正确的。

您拥有的唯一组是"无标题组"。" All 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"
   ]
 }
 */

最新更新