Wie zu verwenden containsObject in NSMutableArray
Ich versuche zu finden, wenn es irgendeinen Gegenstand in das mutable-array entspricht, mit der das Objekt das ich übergeben. Bitte sehen Sie die untenstehende Funktion.
Der name kommt von table view-controller, also die Zeile, die angezapft wird, ist gespeichert in Namen und an diese Funktion übergeben. Ich bin versucht, zu überprüfen, ob der name in der Tabelle view-controller gleich auf die Namen kommen aus der Datenbank. Hier name bezieht sich auf die firstName und lastName..Das ist der Grund, warum ich bin anfügen von strings.
Bitte helft mir..ich bin verwirrt, wie das zu tun..wenn u irgendwelche der bessere Ansatz ist, lasst es mich bitte wissen..vielen Dank..ich denke, die versuchen zu vergleichen, die memory locations, die von dem Objekt (nicht sicher wenn), aber gibt es eine Möglichkeit, so dass es vergleicht genau die Namen, die ich leite..
-(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;
}
BEARBEITEN
Name: Blackmon:Valentin
Suche Kontakt Name
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,
searchContacts
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,
- Haben Sie versucht, die Protokollierung
searchContactName
,name
undsearchContacts
überprüfen Sie den obigen code? - Danke für die Antwort..Wenn ich versuchte, um print-Inhalte auf der Konsole..den Namen hab ich bekommen richtig ist..bitte überprüfen Sie die Werte..ich bearbeitet habe, der obige code
Du musst angemeldet sein, um einen Kommentar abzugeben.
containsObject
wird nur ein boolean zurückgibt. Sie wollen Sie vielleicht indexOfObject: Methode.Eine Sache, die ich bemerkte in Ihrem code ist, dass Ihre anfügen zu oft ein string in der gleichen Zeichenfolge. zum Beispiel, warum nicht Sie verwenden
statt
Und noch wichtiger: Wenn du
searchContactName=[searchContactName stringByDoingSomething]
stellen Sie sicher searchContactName ist freigegeben, sonst werden Sie undicht Speicher.zum Beispiel hier:
Sie undicht werden, das erste Objekt, dann sind Sie gerade hier eine neue (autoreleased) Objekt durch Anhängen
last_name
. Wenn Ihr die Initialisierung so:searchContactName=[searchContactName stringByAppendingString:last_name];
dann ist es nicht notwendig, dies zu tun[[NSString alloc] init];
😉 hoffe es hilft
Sobald Sie haben alle Ihre Daten in das array (also außerhalb der while -), müssen Sie die Iteration über das array und verwenden Sie die Methode isEqualToString für den Vergleich von Namen mit dem aktuellen array-Element.
Ok, so haben Sie einen Blick auf den code unten, die funktioniert:
Wenn Sie genau hinsehen, werden Sie sehen, dass myContact ist "Blackmon:Valentin," die hat ein Komma am Ende. Im array, werden alle Elemente haben ein Komma am Ende. Aber basierend auf dem, was Sie zeigt in Ihrem Beitrag,, der name, den Sie suchen, d.h. Name: Blackmon:Valentin nicht mit einem Komma am Ende. Vielleicht ist das, warum Sie es nicht finden können. Stellen Sie sicher, fügen Sie das Komma am Ende und es sollte funktionieren.