Проблема с выбором дубликатов значений из адресной книги в Iphone SDK - PullRequest
0 голосов
/ 07 октября 2010

Здесь у меня возникла проблема, что я добавляю контакт из адресной книги и проверяю, находится ли он уже в списке избранных или нет. Если нет, я добавляю контакт в список избранных.

  - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
  {

ContactDTO* dtoObject = [[ContactDTO alloc] init];

ABRecordID personId = ABRecordGetRecordID(person);
NSString* personIdStr = [NSString stringWithFormat:@"%d", personId];
dtoObject.contactId = personIdStr;

NSString *lastNameString, *firstNameString;

firstNameString = [self getValueForProperty:kABPersonFirstNameProperty forContact:personIdStr];
lastNameString = [self getValueForProperty:kABPersonLastNameProperty forContact:personIdStr];

dtoObject.firstName =  firstNameString;
dtoObject.lastName =  lastNameString;

printf("\n *****************firstNameString %s",[firstNameString UTF8String]);
//ABMultiValueRef emailMultiValue =[(NSString *)ABRecordCopyValue(person, kABPersonEmailProperty) autorelease];

ABMultiValueRef phoneMultiValue =[(NSString *)ABRecordCopyValue(person, kABPersonPhoneProperty) autorelease];
if (ABMultiValueGetCount(phoneMultiValue) > 0)
{
    ABMultiValueRef phoneMultiValue =[(NSString *)ABRecordCopyValue(person, kABPersonPhoneProperty) autorelease];

    NSString* curentTypeLabel =[(NSString *)ABMultiValueCopyLabelAtIndex(phoneMultiValue,identifier) autorelease];
    curentTypeLabel = [curentTypeLabel stringByReplacingOccurrencesOfString:@"_$!<" withString:@""];
    curentTypeLabel = [curentTypeLabel stringByReplacingOccurrencesOfString:@">!$_" withString:@""];

    dtoObject.numberType = curentTypeLabel;

    NSString* currentPhone = [(NSString *)ABMultiValueCopyValueAtIndex(phoneMultiValue,identifier) autorelease];
    dtoObject.mobNumber = currentPhone; 

    FavoritesAppDelegate* appDelegate = (FavoritesAppDelegate*) [[UIApplication sharedApplication] delegate];

    if ([favoritesArray count] > 0)
    {
        for (int i=0; i< [favoritesArray count]; i++)
        {

            ContactDTO* dtoObject1 = [favoritesArray objectAtIndex:i];
            printf("\n dtoObject1.contactId value = %s,   Main value = %s",[dtoObject.firstName UTF8String],[dtoObject1.firstName UTF8String]);
            printf("\n dtoObject1.mobNumber value = %s,  Main mobNumber value = %s",[dtoObject1.mobNumber UTF8String],[dtoObject.mobNumber UTF8String]);
            if ([dtoObject.firstName isEqualToString:dtoObject1.firstName])
            {

                printf("\n inside if....");
            }
            else
            {
                [appDelegate addContactToFavorites:dtoObject];
                break;
                printf("\n inside else....");

            }

        }
    }
    else
    {
        [appDelegate addContactToFavorites:dtoObject];
    }

    [self dismissModalViewControllerAnimated:YES];

}
/*else if(ABMultiValueGetCount(emailMultiValue) > 0)
{
    NSString* currentEmail =(NSString *)ABMultiValueCopyValueAtIndex(emailMultiValue,identifier);
    printf("\n *************currentEmail** %s",[currentEmail UTF8String]);
    [self emailBtnAction:currentEmail];


}*/
[dtoObject release];

return NO;
 }

Для этого код, который я написал, был показан выше. Даже если я получаю повторяющиеся значения, условие не выполнено и добавляются повторяющиеся значения. Может ли кто-нибудь дать предложения, чтобы избавиться от этого? Любая помощь будет высоко ценится.

Спасибо всем, Мониш.

1 Ответ

0 голосов
/ 07 октября 2010

Вы добавляете в массив избранного, если новый контакт не соответствует ОДНОМУ из существующих элементов в массиве избранного.Но новый контакт может быть в массиве избранного дальше в массиве.Вам необходимо проверить, не соответствует ли новый контакт ВСЕМ из существующих избранных.

Кроме того, не должно ли условие совпадения быть чем-то большим, чем просто проверка имен?

Что-то вроде этого:

BOOL contactAlreadyExists = NO;
for (int i=0; i< [favoritesArray count]; i++)
{
  ContactDTO* dtoObject1 = [favoritesArray objectAtIndex:i];
  if ([dtoObject.firstName isEqualToString:dtoObject1.firstName])
  {
    contactAlreadyExists = YES;
    break;
  }
}
if (!contactAlreadyExists)
{
  [appDelegate addContactToFavorites:dtoObject];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...