App Entwicklung Server Monitoring Tool Anfänger Hilfe

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Seltsam...

    Ich arbeite ja nun nor noch am Umsetzen der Daten die ich in Form eines
    NSDictionary namens jsonDictionary bekomme, meines sieht so aus:



    Quellcode

    1. {
    2. "is_on" = 1;
    3. servername = "www.google.de";
    4. },
    5. {
    6. "is_on" = 1;
    7. servername = "172.17.2.87";
    8. },
    9. {
    10. "is_on" = 1;
    11. servername = "www.ersteseite.de";
    12. }
    13. ,{
    14. "is_on" = 0;
    15. servername = "172.17.0.217";
    16. },
    17. }
    18. "is_on" = 1;
    19. servername = "www.zweiteseite.de";
    20. }
    Alles anzeigen




    Wenn ich versuche (Das folgende wurde von mir so überlegt, es kann/wird falsch sein glaube ich)

    Quellcode

    1. NSString *servernameOut = id servername [layoutDictionary valueForKeyPath:@"servername"]


    ich kann nur servername sagen weil ich ja jeweils nur ein Dictionary mit
    2 Keys und 2 Values habe habe und darunter das gleiche nochmal wie man sieht.
    Irgendwie geht es nicht..selbst beim builden werden mir massenweise fehler ausgegeben.

    kann ich denn das ergebnis gar nicht in einem NSString speichern?
    ich habe diese Abfrage direkt unter dem erstellen des jsonDictionarys

    Quellcode

    1. NSError* error = nil;
    2. self.jsonDictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
    3. if(error)
    4. {
    5. NSLog(@"FAIL!");
    6. }
    7. NSLog(@"Inhalte von jsonDictionary = %@",self.jsonDictionary);

    und dort darunter gepostet, es geht aber nicht.
    zudem, die Ausgabe am Ende, unter der if anweisung gibt den code ganz oben aus, also mein dictionary
    Die Daten um es damit zu versuchen habe ich von : NSDictionary in NSDictionary auslesen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von AlexSuo ()

  • AlexSuo schrieb:

    NSDictionary namens jsonDictionary bekomme, meines sieht so aus:



    Quellcode

    1. {
    2. "is_on" = 1;
    3. servername = "www.google.de";
    4. },
    5. {
    6. "is_on" = 1;
    7. servername = "172.17.2.87";
    8. },
    9. {
    10. "is_on" = 1;
    11. servername = "www.vispronet.de";
    12. }
    13. ,{
    14. "is_on" = 0;
    15. servername = "172.17.0.217";
    16. },
    17. }
    18. "is_on" = 1;
    19. servername = "www.sachsenfahnen.de";
    20. }
    Alles anzeigen

    Das ist kein Dictionary, sondern ein Array von Dictionaries. Ein Dictionary kann nicht mehrfach gleiche Keys enthalten.

    Michael
  • Ein Array von Dictionarys? O.o
    Wie hab ich den mist denn angestellt? damit kann ich nix anfangen, oder?

    Das liegt aber eher an dem was ich mir von php skript ausgeben lasse, kann das sein?

    Also nicht am Code, denn der Code ist mit robin zusammen erstellt worden, und der hats drauf :)

    Was vom Skript kommt ist
    [{"servername":"www.vispronet.de","is_on":"1"},{"servername":"172.17.0.217","is_on":"0"},{"servername":"www.sachsenfahnen.de","is_on":"1"},{"servername":"www.google.de","is_on":"1"},{"servername":"172.17.2.87","is_on":"1"}]
  • AlexSuo schrieb:

    Ein Array von Dictionarys? O.o
    Wie hab ich den mist denn angestellt? damit kann ich nix anfangen, oder?

    Wieso solltest Du damit nichts anfangen können? Nach der Aufgabenstellung überwacht der eine Server doch mehrere anderes Server. Jeder Eintrag im Array steht dann für einen Server.

    AlexSuo schrieb:

    Das liegt aber eher an dem was ich mir von php skript ausgeben lasse, kann das sein?

    Das ist anzunehmen.

    AlexSuo schrieb:

    Was vom Skript kommt ist
    [{"servername":"www.vispronet.de","is_on":"1"},{"servername":"172.17.0.217","is_on":"0"},{"servername":"www.sachsenfahnen.de","is_on":"1"},{"servername":"www.google.de","is_on":"1"},{"servername":"172.17.2.87","is_on":"1"}]

    Sieht für mich nach einem Array von Dictionaries aus.

    Wenn Du nun die Antwort vom Server in Objective-C Objekte umwandelst, musst Du das „deserialisierte“ JSON Objekt einem Array zuweisen. Hier mal ein Beispiel, wie Du alle Servernamen ausgeben kannst:

    Quellcode

    1. NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
    2. for (NSDictionary *server in jsonArray)
    3. NSLog(@"Servername: %@", [server objectForKey:@"servername"]);

    Der Code ist jetzt ungetestet heruntergekippt, daher ohne Gewähr. ;)

    Michael
  • VIelen vielen dank, das hat mich einen großen schritt weiter gebracht :) vor allem konnte ich es schnell verstehen, weil es im php und in anderen sprachen ja fast genauso ist :)

    Ich habe noch einen NSLog hinzugefügt, der mir die is_on mit wert noch ausgibt, die Ausgabe in der Konsole sieht folgendermaßen aus

    Quellcode

    1. 2012-04-17 10:04:20.250 SaFa Monitoringtool[964:f803] Servername: www.ersteseite.de
    2. 2012-04-17 10:04:20.251 SaFa Monitoringtool[964:f803] is_on: 1
    3. 2012-04-17 10:04:20.251 SaFa Monitoringtool[964:f803] Servername: 172.17.0.217
    4. 2012-04-17 10:04:20.251 SaFa Monitoringtool[964:f803] is_on: 0
    5. 2012-04-17 10:04:20.252 SaFa Monitoringtool[964:f803] Servername: zweiteseite.de
    6. 2012-04-17 10:04:20.252 SaFa Monitoringtool[964:f803] is_on: 1
    7. 2012-04-17 10:04:20.252 SaFa Monitoringtool[964:f803] Servername: www.google.de
    8. 2012-04-17 10:04:20.253 SaFa Monitoringtool[964:f803] is_on: 1
    9. 2012-04-17 10:04:20.253 SaFa Monitoringtool[964:f803] Servername: 172.17.2.87
    10. 2012-04-17 10:04:20.254 SaFa Monitoringtool[964:f803] is_on: 1


    Da ich das da nun liegen hatte wollte ich über geschachtelte if abfragen einfach die werte den images zuweisen, also in etwa so.

    Quellcode

    1. if ([server objectForKey:@"servername"] == @"www.ersteseite.de")
    2. {
    3. if([server objectForKey:@"is_on"] == @"1")
    4. {
    5. onOffView1.image = [UIImage imageNamed:@"on.png"];
    6. }
    7. else
    8. {
    9. onOffView1.image = [UIImage imageNamed:@"ff.png"];
    10. }
    11. }
    12. else if([server objectForKey:@"servername"] == @"www.zweiteseite.de")
    13. {
    14. if([server objectForKey:@"is_on"] == @"1")
    15. {
    16. onOffView1.image = [UIImage imageNamed:@"on.png"];
    17. }
    18. else
    19. {
    20. onOffView1.image = [UIImage imageNamed:@"ff.png"];
    21. }
    22. }
    Alles anzeigen


    Wobei ich grad sehe das man das sicher auch gut mit for oder while schleife lösen kann...
    Die Image zuweisungen gehen hundert prozentig, das weiß ich.

    Ich woltle es erstmal testen, NUR mit

    Quellcode

    1. if ([server objectForKey:@"servername"] == @"www.ersteseite.de")
    2. {
    3. //Ausgabe in der Konsole etc.
    4. }


    diesem kleinen teil erstmal und einer NSLog ausgabe, aber die Ausgabe kommt nicht...obwohl is_on garantiert 1 ist..steht ja auch drüber, die ausgabe des gesamten arrays ist ja noch drin^^
    Was mache ich falsch? und ist das eigentlich eine einwandfreie lösung? das ist mir einfach so eingefallen.
  • Du verlgeichst Objekte und keine String. Das geht aber in PHP auch nicht oder kann man da

    $vorname="name";

    if(vorname=="name")

    machen ?

    Da must du doch auch einen if(strcmp(vorname,"name")) machen oder nicht ?

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • nuja, if($vorname = "name") geht soweit ich weiß.

    Mir ist auch grad eingefallen das ich diese zuweisung nicht so machen darf, das die Abfrage eine bestimmte reihenfolge vorraussetzt, denn der server speichert in der mysql datenbank dank des großen timeout fächers gerne mal einen server vor nem andern...aber es sind immer 5 verschiedene, das ist garantiert
  • Ich wollte jetzt mit einer etwas einfacheren if abfrage die in der forschleife läuft sehn was ich amchen muss, dann mus ich nur noch über 2 ifs gehn..
    Einfach nur

    Quellcode

    1. NSString *path = @"www.ersteseite.de"
    2. NSString *link1 = [server objectForKey:@"servername"];
    3. if(path == link1)
    4. {
    5. NSLog(@"Ja, so ist es!");
    6. }


    Das geht nicht...es springt nicht in die if...

    Ich habs mit direkt zuweisen versucht, also

    Quellcode

    1. NSString *link1 = @"www.ersteseite.de";


    Ich warte und lass mir sogar alles immer ausgeben und tatsächlich wird gesagt in er konsole

    Quellcode

    1. link1:www.ersteseite.de path:www.ersteseite.de
    2. Und trotzdem springt es nicht rein...ist das nicht unlogisch?
  • Ich hab hier wirklich 3 variablen zum testen...

    Quellcode

    1. NSString *path = [server objectForKey:@"servername"];
    2. NSString *path2 = [server objectForKey:@"servername"];
    3. NSString *link1 = @"www.ersteseite.de";
    4. //Ausgabe in der KONSOLE!
    5. path:www.ersteseite.de
    6. path2:www.ersteseite.de
    7. link1:www.ersteseite.de

    Und trotzdem geht das srpingen nur wenn ich in der if path und path 2 vergleiche, wenn ich einen von beiden mit link 1 vergleiche wo aber das gleiche drin steht geht es nicht..
  • Nachdem dir die korrekte Antwort von Thallius ("Du verlgeichst Objekte und keine String.") offenbar nicht gefällt:

    warte, bis sich der Wasserstand 0.87m über dem mittleren Hochwasserstand in einer sternenklaren Neumondnacht eingependelt hat, während zur gleichen Zeit in Südafrika eine Borkenkäferplage ausbricht.
    Dann sollte das funktionieren.

    Mal ernsthaft, ich verstehe dein Problem nicht.
    Wenn man dir sagt, == wird nix, warum kommst du nicht selbst auf -isEqualToString: oder fragst wenigstens nach?
    (Oh, da warst du fünf Minuten schneller als ich. Gratuliere!)

    Überhaupt, du hast ein Array von Dictionaries. Offensichtlich willst du eine tabellarische Darstellung.
    Du kannst dir diesen ganzen Krams mit den Stringvergleichen sparen, wenn du Datasource und Delegate der Tabelle ordentlich einrichtest. Dafür ist dein Array mit den Dictionaries wie geschaffen.
    Links der Name, rechts das Bild in Abhängigkeit von is_on und gut ist. Oder anders herum. Oder quer durcheinander.

    So kommst du jedenfalls nicht weiter und wie der Resonanz der letzten zwei Stunden zu entnehmen ist wird dir mittlerweile auch kaum noch jemand helfen wollen.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Ich möchte doch keinen Tableview . Bitte erst lesen :(
    Ich bin anfänger, ich habe ihn jediglich falsch verstanden, kein grund gleich unhöflich zu werden...

    Ich hab die Lösung gefunden und bin sehr dankbar für jede Hilfe, seine Anmerkung hat mich am Ende ja auch dazu gebracht, also? ist sein Rat doch nicht umsonst gewesen und er hat mir geholfen, wo ist das Problem?

    Bitte nicht gleich in Scumbag-Sprache ausweichen...
  • So, ich muss also alles nochmal umbauen, wegen einiger Schwierigkeiten was den inneren Vergleich angeht damit man den Image Views die Bilder zuordnen kann muss ich nun das ganze in einem dynamischen tableview platzieren, dabei wird dann einfach der hintergrund auf rot oder grün gesetzt :D ich weiß auch schon wie ich das angehe
  • Quellcode

    1. Inhalt von jsonArray = (
    2. {
    3. "is_on" = 1;
    4. servername = "www.meineseite1.de";
    5. },
    6. {
    7. "is_on" = 1;
    8. servername = "www.meineseite2.de";
    9. },
    10. {
    11. "is_on" = 1;
    12. servername = "www.google.de";
    13. },
    14. {
    15. "is_on" = 1;
    16. servername = "172.17.2.87";
    17. },
    18. {
    19. "is_on" = 0;
    20. servername = "172.17.0.217";
    21. }
    22. )
    Alles anzeigen



    So sieht mein Array nach einigen andern projekten und aufgaben und ein wenig geteste aus, das ist alles was ich brauche.
    Tableview ist eingerichtet, tabelle ist da, jedoch kann ich dieses array nicht als datasourcve benutzen, ich denke weil es mehrere objekte enthällt und eine zelle nicht mehr darstellen kann, ist das richtig? wie wäre es denn richtig, wie könnte ich es lösen?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von AlexSuo ()

  • naja doch ein Array ist schon passend, in der Methode

    Quellcode

    1. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath


    machst dann einfach nachdem du die Zelle initialisiert hast

    Quellcode

    1. NSDictionary *dictionary = [self.deinArray objectAtIndex:indexPath.row];
    2. cell.textLabel.text = [dictionary objectForKey:@"servername"];
    3. if ([dictionary objectForKey:@"is_on" isEqualToString @"1"]) {
    4. cell.contentView setBackgroundColor:[UIColor greenColor]];
    5. } else {
    6. cell.contentView setBackgroundColor:[UIColor redColor]];
    7. }
    8. return cell
    [window close]
  • Quellcode

    1. -(UITableViewCell *) tableView:(UITableView
    2. *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    3. {
    4. static NSString *CellIdentifier = @"Cell";
    5. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    6. if (cell == nil) {
    7. cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    8. }
    9. NSDictionary *dictionary = [self.jsonArray objectAtIndex:[indexPath row]];
    10. cell.textLabel.text = [dictionary objectForKey:@"servername"];
    11. if ([dictionary objectForKey:@"is_on"]) {
    12. [cell.contentView setBackgroundColor:[UIColor greenColor]];
    13. }
    14. else {
    15. [cell.contentView setBackgroundColor: [UIColor redColor]];
    16. }
    17. return cell;
    18. }
    Alles anzeigen


    So sieht die methode jetzt aus.
    Ein Durchlauf findet statt, alle Logs werden ausgegeben, es läuft also durch, geht auch überall hin, nur leider wird die tabelle dann immernoch leer angezeigt, selbst die Zelle, die ich ja eigentlich initialisiere, erscheint nicht. woran kann es liegen?