【问题标题】:IPhone AddressBook method to return or create a ABRecordIPhone AddressBook 方法返回或创建一个 ABRecord
【发布时间】:2012-02-20 12:30:51
【问题描述】:

我的地址簿和内存确实有问题。我希望它返回可以保存联系人的记录(现有记录或新记录)。根据构建和分析工具,这个功能有很多问题。我已经阅读了文档并重新编写了很多次,但我似乎无法正确。

编写此方法的正确方法是什么? / 我做错了什么?

//Searches Groups by name for matches and returns the attached record
- (ABRecordRef)getGroup
{   
    ABRecordRef response;

NSArray *groups = (NSArray*)ABAddressBookCopyArrayOfAllGroups(addressBook);

for (id group in groups)
{
    NSString *currentGroup = (NSString*)ABRecordCopyValue(group, kABGroupNameProperty);
    if ([currentGroup isEqualToString:GroupName])
    {
        response = group;
        CFRelease(currentGroup); //??
        break;
    }
    CFRelease(currentGroup); //?
}

[groups release];

if (response == NULL)
{
    response = ABGroupCreate();
    ABRecordSetValue(response, kABGroupNameProperty, GroupName, &error);
    ABAddressBookAddRecord(addressBook, response, &error);
    ABAddressBookSave(addressBook, &error);
}
return response;

}

【问题讨论】:

  • 不打算回答,因为我不太了解 AB API,但至少您需要自动释放响应,因为它是由包含“create”的调用返回的

标签: iphone objective-c ios memory-leaks addressbook


【解决方案1】:

仅获取记录 ID 更容易、更可靠。 如果在不相关的帖子中找到这个 - https://stackoverflow.com/a/8249975/874927

- (BOOL)checkIfGroupExists
{   
    BOOL hasGroup = NO;

    CFIndex groupCount = ABAddressBookGetGroupCount(addressBook);
    CFArrayRef groups = ABAddressBookCopyArrayOfAllGroups(addressBook);

    for (int i = 0; i < groupCount; i++)
    {
        ABRecordRef currentGroup = CFArrayGetValueAtIndex(groups, i);
        NSString *currentGroupName = (NSString*)ABRecordCopyCompositeName(currentGroup);

        if ([currentGroupName isEqualToString:GroupName])
        {
            hasGroup = YES;
            groupRecordId = ABRecordGetRecordID(currentGroup);
        }
        CFRelease(currentGroupName);
    }

    if (hasGroup == NO)
    {
        [self createNewGroup];
    }

    CFRelease(groups);
    return hasGroup;
}

【讨论】:

    猜你喜欢
    • 2016-04-05
    • 2015-05-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2012-10-23
    • 2018-12-16
    • 1970-01-01
    相关资源
    最近更新 更多