【问题标题】:ABAddressBook/ABSource for OS X用于 OS X 的 ABAddressBook/ABSource
【发布时间】:2014-01-24 16:55:22
【问题描述】:

我正在为 Mac 开发一个自定义的“联系人”实现,我发现我无法从 iOS 获得 ABSource 的等效行为。例如,在 Mac 联系人应用程序中,我可以看到我的 iCloud 源及其下方的组。当我查询 ABAddressBook 的组时,我得到的唯一结果是“无标题组”(见下文)。所以最终,我要问的是如何从我的 ABGroup 组(无标题组)中获取源(iCloud),以便我可以构建类似的 UI。 Mac 中似乎缺少此功能 - 我希望我只是忽略了它。

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

【问题讨论】:

    标签: macos cocoa abaddressbook


    【解决方案1】:

    你得到的是正确的。

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

    【讨论】:

      猜你喜欢
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      • 2014-03-10
      • 2017-10-24
      相关资源
      最近更新 更多