Как использовать containsObject в NSMutableArray - PullRequest
0 голосов
/ 23 августа 2010

Я пытаюсь найти, есть ли какой-либо объект в изменяемом массиве, который соответствует объекту, который я передаю. Пожалуйста, смотрите функцию ниже.

Имя взято из контроллера табличного представления, поэтому постукивающая строка сохраняется в имя и передается этой функции. Я пытаюсь проверить, совпадает ли имя в контроллере табличного представления с именем, поступающим из базы данных. Здесь имя относится к firstName и lastName. Вот почему я добавляю эти строки.

Пожалуйста, помогите мне .. Я не понимаю, как это сделать .. Если у вас есть какой-то лучший подход, пожалуйста, дайте мне знать .. Большое спасибо .. Я думаю, что он пытается сравнить места в памяти объекта (не уверен хотя) но есть ли способ, чтобы он сравнивал именно то имя, которое я передаю ..

-(NSMutableDictionary *)getSearchContacts:(NSString *)name
{
 //---retrieve rows--- 
 NSString *qsql =[[NSString stringWithFormat:@"SELECT * FROM CONTACTS WHERE last_name LIKE '%@",[name substringToIndex:1]]stringByAppendingString:@"%' GROUP BY sugar_id ORDER BY last_name"]; 
 NSString *sugar_id;
 NSString *first_name;
 NSString *last_name;
 NSMutableArray *searchContacts=[[NSMutableArray alloc] init];

 sqlite3_stmt *statement;
 if (searchContactName == nil) {
  searchContactName=[[NSString alloc]init];
 }
 if (sqlite3_prepare_v2( db, [qsql UTF8String], -1, &statement, nil) == SQLITE_OK) {
  while (sqlite3_step(statement) == SQLITE_ROW) { 
   sugar_id= [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)];
   first_name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 3)];
   last_name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 4)];  

   if ([first_name isEqualToString:@"(null)"]) {
    last_name=[last_name stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[last_name substringToIndex:1] uppercaseString]];
    searchContactName=[searchContactName stringByAppendingString:last_name];
    searchContactName=[searchContactName stringByAppendingString:@":"];
    searchContactName=[searchContactName stringByAppendingString:@","];

   }
   else {

    first_name=[first_name stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[first_name substringToIndex:1] uppercaseString]];
    last_name=[last_name stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[last_name substringToIndex:1] uppercaseString]];
    searchContactName=[searchContactName stringByAppendingString:last_name];
    searchContactName=[searchContactName stringByAppendingString:@":"];
    searchContactName=[searchContactName stringByAppendingString:first_name];
    searchContactName=[searchContactName stringByAppendingString:@","];

   }
   [searchContacts addObject:searchContactName];
   //first_name = nil;
   //last_name = nil;
    if ([searchContacts containsObject:name]==YES) {
               searchSugarId=[[NSMutableDictionary alloc]initWithObjectsAndKeys:sugar_id,searchContactName,nil];
   }

  }
  //---deletes the compiled statement from memory--- 
  sqlite3_finalize(statement);
 } 
 return searchSugarId;

}

EDIT

Имя: Blackmon: Valentin

Поиск контактного лица Barefield: Collin, Baylis: Efren, Битти: Питер, Беквит Линн, Бенни: Вильма, Бермудес: Ленор, Berryhill: Gerard, желчи: Джоди, Blackmon: Валентин, Blassingame: Роза, Блюм: Рена, Бонет: Клод, Бостик: Valerie, Bouldin: Renaldo, Bracewell: Брендан, Брэдфорд: Kris, Brathwaite: Билл, Бруггер: Исмаэль, Brumit: Джули, Buchholtz: Mathew, Бункер: Кристал, Burch: Флойд, Бурман: Санг, Мясник: Принц, Butcher: Рори,

* 1021 Поиск Контакты * Barefield: Collin, Baylis: Efren, Битти: Питер, Беквит Линн, Бенни: Вильма, Бермудес: Ленор, Berryhill: Gerard, желчи: Джоди, Blackmon: Валентин, Blassingame: Роза, Блюм: Рена, Бонет: Клод, Бостик: Valerie, Bouldin: Renaldo, Bracewell: Брендан, Брэдфорд: Kris, Brathwaite: Билл, Бруггер: Исмаэль, Brumit: Джули, Buchholtz: Mathew, Бункер: Кристал, Burch: Флойд, Бурман: Санг, Мясник: Принц, Butcher: Рори,

Ответы [ 3 ]

3 голосов
/ 23 августа 2010

containsObject вернет только логическое значение.Возможно, вам нужен indexOfObject: метод.

NSInteger index = [array indexForObject:anObject];

Одна вещь, которую я заметил в вашем коде, это то, что вы добавляете слишком много раз строку в одну и ту же строку.например, почему бы вам не использовать

searchContactName = [searchContactName stringByAppendingFormat:@"%@:%@,", last_name, first_name];

вместо

searchContactName=[searchContactName stringByAppendingString:last_name];
    searchContactName=[searchContactName stringByAppendingString:@":"];
    searchContactName=[searchContactName stringByAppendingString:first_name];
    searchContactName=[searchContactName stringByAppendingString:@","];

И еще более важно: при выполнении searchContactName=[searchContactName stringByDoingSomething] убедитесь, что searchContactName освобожден, иначе у вас будет утечка памяти.

например, здесь:

searchContactName=[[NSString alloc]init];
...
searchContactName=[searchContactName stringByAppendingString:last_name];

вы пропускаете первый объект, затем вы просто создаете новый (автоматически выпущенный) объект, добавляя last_name.Если вы инициализируете так: searchContactName=[searchContactName stringByAppendingString:last_name];, то нет необходимости делать [[NSString alloc] init];

;) Надеюсь, это поможет

2 голосов
/ 23 августа 2010

После того, как у вас есть все данные внутри массива (поэтому вне времени), вам нужно перебрать массив и использовать метод isEqualToString для сравнения имени с текущим элементом массива.

Хорошо, посмотрите на приведенный ниже код, который работает:

+ (void)testContact {
NSArray *searchContacts = [NSArray arrayWithObjects:
                                                        @"Barefield:Collin,",
                                                        @"Baylis:Efren,",
                                                        @"Beatty:Peter,",
                                                        @"Beckwith:Lynn,",
                                                        @"Benny:Wilma,",
                                                        @"Bermudes:Lenore,",
                                                        @"Berryhill:Gerard,",
                                                        @"Biles:Jodi,",
                                                        @"Blackmon:Valentin,",
                                                        @"Blassingame:Rose,",
                                                        @"Blume:Renae,",
                                                        @"Bonet:Claude,",
                                                        @"Bostic:Valerie,",
                                                        @"Bouldin:Renaldo,",
                                                        @"Bracewell:Brendan,",
                                                        @"Bradford:Kris,",
                                                        @"Brathwaite:Bill,",
                                                        @"Brugger:Ismael,",
                                                        @"Brumit:Julie,",
                                                        @"Buchholtz:Mathew,",
                                                        @"Bunker:Chrystal,",
                                                        @"Burch:Floyd,",
                                                        @"Burman:Sang,",
                                                        @"Butcher:Prince,",
                                                        @"Butcher:Rory,",nil];
NSString *myContact = @"Blackmon:Valentin,";
for (NSString *contact in searchContacts) {
    if ([contact isEqualToString:myContact]) {
        NSLog(@"FOUND!!!!!");
        break;
    }
}
}

Если вы посмотрите внимательно, вы увидите, что myContact - это "Blackmon: Valentin", в конце которого стоит запятая.В вашем массиве все ваши элементы имеют запятую в конце.Но в зависимости от того, что вы показываете в своем посте, имя, которое вы ищете, то есть Имя: Blackmon: у Валентина нет запятой в конце.Может быть, поэтому вы не можете его найти.Убедитесь, что вы добавили запятую в конце, и она должна работать.

0 голосов
/ 21 июня 2013
[mutableArry addObject:[NSNumber numberWithInt:questionNumber]];
NSLog(@"mutableArry=%@",mutableArry);
  NSLog(@" question not complete  count=%d",mutableArry.count);

if (mutableArry.count==25) {
    NSLog(@"25 question complete%d",mutableArry.count);
}

NSString *str= [NSString stringWithFormat:@"%d",questionNumber];
NSLog(@"str=%@",str);



 //  array = [NSArray arrayWithObjects: @"Nicola", @"Margherita",                                       @"Luciano", @"Silvia", nil];
    if ([mutableArry containsObject:str]) // YES
    {
        NSLog(@"Results");

    }
...