IPhone AddressBook метод для возврата или создания ABRecord - PullRequest
0 голосов
/ 20 февраля 2012

У меня проблемы с адресной книгой и памятью. Я хочу, чтобы он возвращал запись (существующую или новую), в которую я могу сохранить контакт. Существует много неправильных с этой функцией в соответствии с инструментом построения и анализа. Я прочитал документацию и переписал ее несколько раз, но, похоже, не могу понять, что это правильно.

Как правильно написать этот метод? / Что я делаю не так?

//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;

}

1 Ответ

0 голосов
/ 20 февраля 2012

Проще и надежнее просто получить 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;
}
...