1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Mehrere Tags in NSDictionary für einzelnen Key

Dieses Thema im Forum "OS X-Developer" wurde erstellt von nelfisch, 23.03.10.

  1. nelfisch

    nelfisch Carola

    Dabei seit:
    15.03.08
    Beiträge:
    108
    Hej Leute,

    und wieder lande ich im AT :) Diesmal habe ich ein, für mich echt kompliziertes, Problem: Ich würde in einer Such-Funktion meinen einzelnen Listeneinträgen gerne Tags zu weisen. Erläuterung:Wenn jemand nach dem Tag sucht, sollen alle ursprünglichen Listeneinträge angezeigt werden, die mit diesem Tag "Verknüpft" sind. Habe mir gedacht, ich mache einfach ein NSDictionary mit einem Array der Tags als Objekt und dem Listennamen als Key. Aber irgendwie stellte sich das dann doch als nicht so einfach herraus. Hier mal etwas Code:
    Code:
    tags = [[NSMutableDictionary alloc] initWithDictionary:[[NSDictionary alloc] initWithObjects:[NSArray arrayWithObjects:@"Energie", @"Kinetik", @"Bewegung", nil] forKeys:[NSArray arrayWithObjects:@"KinetischeEnergie", @"KinetischeEnergie", @"KinetischeEnergie", nil]]];
    	
    	//MECHANIK
    	[tags setObject:[NSArray arrayWithObjects:@"Energie", @"Potenzial", @"Bewegung", nil] forKey:@"PotenzielleEnergie"];
    	[tags setObject:[NSArray arrayWithObjects:@"Beschleunigt", @"Bewegung", @"Gleichmäßig", nil] forKey:@"GleichmaesigBeschleunigt"];
    
    So, soweit so gut, das Dictionary wird erst mal planmäíg befüllt. Dann habe ich mir gedacht, es wäre doch nicht schlecht, wenn wir erst mal alle Tags sammeln würden, um diese dann in unserer Suchliste abzubilden:
    Code:
    tags = [[NSDictionary alloc] initWithDictionary:[self.navigationController getDictForTags]];
    NSArray* keyArray = [[NSArray alloc] initWithArray:[[self.navigationController getDictForTags] allKeys]];
    	for(int i = 0; i < [keyArray count]; i++){
    		
    		if([[tags objectForKey:[keyArray objectAtIndex:i]] isKindOfClass:[NSArray class]]){
    			
    			
    		NSString* string1 = [NSString stringWithFormat:@"%@",[[tags objectForKey:[keyArray objectAtIndex:i]] objectAtIndex:0]];
    		NSString* string2 = [NSString stringWithFormat:@"%@",[[tags objectForKey:[keyArray objectAtIndex:i]] objectAtIndex:1]];
    		NSString* string3 = [NSString stringWithFormat:@"%@",[[tags objectForKey:[keyArray objectAtIndex:i]] objectAtIndex:2]];
    		
    		if([allTags containsObject:string1] == FALSE){
    			[allTags addObject:string1];
    			
    		}
    	    if([allTags containsObject:string2] == FALSE){
    			[allTags addObject:string2];
    		}
    		if([allTags containsObject:string3] == FALSE){
    			[allTags addObject:string3];
    		}
    		
    		}}
    
    Das funktioniert auch noch alles super, ich habe die Tags dann in meinem Array. Damit hätte ich eigentlich alles, womit ich meine Suche implementieren könnte. Einziges Problem: Wie kriege ich meine Keys, also bei mir sind das NibNames, aus meinem Tags-Dictionary mithilfe der Einträge aus allTags wieder raus?! Ich habe es mit
    Code:
    [tags allKeysForObject:string1];
    und ähnlichem versucht, komme aber leider auf keinen Grünen Zweig bei der Sache.

    Meine Frage nun: Habt ihr eine Idee, wie ich mit meinem Ansatz ans Ziel komme oder habt ihr sogar noch einen besseren ohne so viele Umwege? :D

    Greetz,

    nelfisch
     
  2. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.470
    Warum erzeugst Du erst ein NSDictionary, aus dem Du dann gleich ein NSMutableDictionary erzeugst? Das Du so außerdem ein Speicherleck erzeugst ist Dir bewusst? Keys kann man auch nur einmal im Dictionary haben. Du wirst hier also am Ende nur ein Objekt-Key-Paar im Dictionary haben.


    Warum erzeugst Du überall neue Objekte? Super ist das nicht. ;) Ich schätze mal, Dein Speicher wird durchlöchert, wie ein Schweizer Käse.

    Warum drehst Du das nicht einfach um. Mach Dir doch ein Dictionary, wo Du die Tags als Keys benutzt und denen dann als Array die Listeneinträge zuordnest. Die Suche nach den Listeneinträgen eines Tags beschränkt sich dann ein objectForKey: Aufruf.

    MacApple
     

Diese Seite empfehlen