PLIST als Anfänger

  • jetzt habt ihr mich komplett abgehängt... :)

    ich will aus einem Array, dass in einer PLIST gespeichert ist, einfach die drei einzelnen Werte auslesen
    Gesamtheitlich geht das ja auch...
    Aber ich würde gerne auf die einzelnen Wert zugreifen, also NUR auf den ersten Eintrag im Array, oder NUR auf den zweiten oder NUR auf den Dritten und nicht alle zusammen.

    wenn ich schon die Anzahl der Einträge des Arrays über "count" abrufen will, kommt im Log schon eine Fehlermeldung:
    [__NSCFString count]: unrecognized selector sent to instance 0x3647a0
  • Quellcode

    1. id aKey = "0-0"; for (aKey in dic) {
    2. NSArray *test = [dic objectForKey:aKey];
    3. NSInteger i = [test count];
    4. NSLog(@"%i",i);
    5. NSString *string = [test objectAtIndex:0];
    6. NSLog(@"%@",string); }


    über "count" sollte doch dann eine "3" ausgegeben werden, denn unter "0-0" sind drei Einträge vorhanden (Item 0, item 1, item 2)... Die Werte dieser drei Einträge sehe ich auch, wenn ich den aKey ausgeben lasse... .
    aber das ermitteln via count führt zu dem Fehler...
    UNd dann den Array durchgehen, um die items einzeln ausgeben zu lassen, das ist ja noch die Ursprungsfrage :)
  • also du hast da kein array sondern ein dict.

    das = "0-0" ist in deinem code komplett überflüssig (und auch nicht korrekt) und wird ignoriert.

    du gehst in der schleife dann die keys durch und holst dir die arrays die den keys zugeordnet sind.

    das problem bei dir ist, dass der wert zum dritten key (eigentlich ist die reihenfolge der keys nicht definiert) ein string (Player1") und kein Array ist!
  • ok, dass mit dem "0-0" hab ich verstanden... habt recht :)

    So, nu hab ich es hinbekommen....
    sieht bestimmt nicht toll aus, aber es geht: ich kann "0-0" oder "1-0" selektieren und dann über objectAtIndex auswählen welchen Wert im Array er ausgeben soll
    Sieht ziemlich wüst aus.. aber an dieser Stelle - hauptsache es geht

    Quellcode

    1. -(void)configreader {
    2. NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"Map-Data" ofType:@"plist"];
    3. NSDictionary *dic = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
    4. id aKey;
    5. NSString * test[10];
    6. int i=0;
    7. for (aKey in dic) {
    8. test[i] = [dic objectForKey:aKey];
    9. NSLog(@"%@",aKey);
    10. _Bool booltest;
    11. booltest =[aKey isEqualToString:@"1-0"]; //Wonach soll er suchen
    12. if (booltest==true){ NSLog(@"Yes");
    13. NSArray *array2 = test[i];
    14. NSLog(@"%@", [array2 objectAtIndex:0]); //den wievielten Wert des Arrays soll er ausgeben - hier "0"
    15. i=i+1;
    16. }
    17. }
    Alles anzeigen



    Auch wenn ich nicht alles hier im Thread verstanden habe:
    Danke - hat mir jedenfalls geholfen zu verstehen, an welchen Punkten ich suchen muss :)
  • eddi80 schrieb:

    So, nu hab ich es hinbekommen....

    Glückwunsch zur Zielerreichung. Zur Belohnung hier mal die elegante Variante:

    Quellcode

    1. - (void)configreader
    2. {
    3. NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Map-Data" ofType:@"plist"];
    4. NSDictionary *dic = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
    5. NSString *theKey = @"1-0"; //Wonach soll er suchen
    6. NSUInteger index = 0; //den wievielten Wert des Arrays soll er ausgeben - hier "0"
    7. NSArray *array = [dic objectForKey:theKey];
    8. if ((array != nil) && (index < [array count]))
    9. {
    10. NSLog(@"Yes");
    11. NSLog(@"%@", [array objectAtIndex:index]);
    12. }
    13. }
    Alles anzeigen

    Das dürfte zu gleichen Ausgabe (ohne Keys) führen.

    Michael
  • eddi80 schrieb:

    ok, dass mit dem "0-0" hab ich verstanden... habt recht :)

    So, nu hab ich es hinbekommen....
    sieht bestimmt nicht toll aus, aber es geht: ich kann "0-0" oder "1-0" selektieren und dann über objectAtIndex auswählen welchen Wert im Array er ausgeben soll
    Sieht ziemlich wüst aus.. aber an dieser Stelle - hauptsache es geht

    Quellcode

    1. -(void)configreader {
    2. NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"Map-Data" ofType:@"plist"];
    3. NSDictionary *dic = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
    4. id aKey;
    5. NSString * test[10];
    6. int i=0;
    7. for (aKey in dic) {
    8. test[i] = [dic objectForKey:aKey];
    9. NSLog(@"%@",aKey);
    10. _Bool booltest;
    11. booltest =[aKey isEqualToString:@"1-0"]; //Wonach soll er suchen
    12. if (booltest==true){ NSLog(@"Yes");
    13. NSArray *array2 = test[i];
    14. NSLog(@"%@", [array2 objectAtIndex:0]); //den wievielten Wert des Arrays soll er ausgeben - hier "0"
    15. i=i+1;
    16. }
    17. }
    Alles anzeigen



    Auch wenn ich nicht alles hier im Thread verstanden habe:
    Danke - hat mir jedenfalls geholfen zu verstehen, an welchen Punkten ich suchen muss :)


    sorry, aber das ist totaler müll - lies was einführendes!
  • sorry, aber das ist totaler müll - lies was einführendes!
    Top! Das motiviert Anfänger ungemein :)
    Ich war erst mal froh, dass ich es überhaupt hinbekommen habe...
    Ausserdem lerne ich lieber am lebenden Objekt, statt sturr Dokumente/Bücher zu lesen...

    Viele Grüße
    Eddi
  • eddi80 schrieb:

    sorry, aber das ist totaler müll - lies was einführendes!
    Top! Das motiviert Anfänger ungemein :)
    Ich war erst mal froh, dass ich es überhaupt hinbekommen habe...
    Ausserdem lerne ich lieber am lebenden Objekt, statt sturr Dokumente/Bücher zu lesen...

    Viele Grüße
    Eddi


    das führt aber zu nichts.
    du wirst mir auch zustimmen wenn du dir später mal den code anschaust!
  • wenn man die beiden Codes vergleicht... geb ich Dir absolut recht... .
    Aber davor, hatte ich gar keinen Anhaltspunkt, wie ich mein "Problem" löse, da ich auch keine entsprechenden Beispiele gefunden habe....

    ok - egal... wir hams ja jetzt! ;)

    Ich muss aber ehrlich sagen, objective-C ist echt ne ganz andere Nummer, als einfach in C/C++ runterzurprogrammieren.
    Ich versuche gerade ein Strategiespiel, welches ich vor Jahren mal als Projekt in C++ (WinApi) geschrieben hatte, wieder neu aufzulegen.. und zwar nur auf dem Mac mit objective-C.
    Dachte, so ein Projekt hilft am konkreten Beispiel zu lernen.... .
    Hab mir auch ein Buch gekauft und zu 3/4 gelsen (ok, nicht komplett), aber es hat mir bis dahin nicht sooo viel gebracht, da es nicht auf konkrete Anwendungsfälle einging, die ich brauchte. und das fehlende 1/4, was ich nicht mehr gelesen hatte, ging auf ganz andere Themen ein.... . War eher ein Fehlgriff das Buch.