Eine Prototype Cell ist im View enthalten, ihr Reuse Identifier ist Cell
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
-
-
hmmm, wie oft springt er denn in die Methode cellForRowAtIndexPath?[window close]
-
OK, seltsamerweise jetzt gar nicht mehr ._.
-
-
Ja enthällt es^^ aber jez wo ich versucht habe es am Count darunter zu prüfen sehe ich das er nichtmal in diese methode springt.
Aber es stand genauso auch da -
dataSource und delegate im IB mit deinem Controller verbunden? in der .h Datei vom Controller bei der Implementierung auch das <UITableViewDataSource, UITableViewDelegate> drin stehen?[window close]
-
Ja, das stimmt alles soweit, wäre das nicht dabei gewesen hätte es auch ne exception gegeben
-
dann wäre natürlich noch die Frage ist der TableView sichtbar, weil wenn nicht springt er soweit ich weiß auch nicht in die Methoden da er nix anzeigen muss[window close]
-
Nunja, er ist gebaut auf dem Storyboard und eine prototype cell ist daran gebaut die den Identifier "Cell" hat.
Soweit ist alles sichtbar, es springt nur nicht in die Methode. Alles andere, der Abruf der Daten über die NSURLConnection und die JSONSeririalization funktionieren. Das mit den Images und den Texten klappt wunderbar.
Gesendet wird was ich schrieb.
Da ich nicht an der App rumfummeln sollte sobald neuer server kommt oder sich mal die adresse von einem ändert und ich so also eine darstellung brauche und keinen vergleich innerhalb der app wollte ich jetzt eine tableView benutzen auf empfehlung.
Bisher ist es ja:
Daten kommen.for jeden eintrag in dem jsonArray welches für den augenblick als Dic verwendet wird wir abgefragt ob er vom inhalt von "Servername" gleich ist wie eine der 5 Strings die fest im programm stehn und je nach fall wird einen image ein bild zugeordnet.
Aber wie gesagt, das kann jetzt keine option mehr sein diese Strings jedes mal umzuschreiben, oder neue hinzuzufügen und auch mehr abfragen pro server einzutragen.
Implementierungsfile sieht folgendermaßen aus :
Quellcode
- #import "XYZViewController.h"
- @interface XYZViewController ()
- @end
- @implementation XYZViewController
- @synthesize onOffView1;
- @synthesize onOffView2;
- @synthesize onOffView3;
- @synthesize onOffView4;
- @synthesize onOffView5;
- @synthesize jsonArray;
- - (void) viewWillAppear:(BOOL)animated
- {
- //Before the first view appears this will happen
- NSLog(@"ViewWillAppear");
- [super viewWillAppear:YES];
- //UpdateContent manages the Connection and returns the request data
- (JSON) for decoding and using it
- NSLog(@"Immerhin geht es weiter");
- }
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- //Do any additional setup after loading the view, typically from a nib.
- NSLog(@"Aber in did load springt es noch");
- [self updateContent];
- self.jsonArray = [[NSMutableArray alloc] init];
- }
- - (void)viewDidUnload
- {
- [self setOnOffView1:nil];
- [self setOnOffView2:nil];
- [self setOnOffView3:nil];
- [self setOnOffView4:nil];
- [self setOnOffView5:nil];
- [super viewDidUnload];
- //Release any retained subviews of the main view.
- }
- - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
- {
- return
- (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
- }
- - (IBAction)postRequestButton:(id)sender
- {
- [self updateContent];
- }
- - (void) updateContent
- {
- NSLog(@"updateContent");
- //Request initiates
- NSURLRequest *jsonRequest = [NSURLRequest requestWithURL:[NSURL
- URLWithString:@"http://172.17.2.45/server/abrufen.php"]
- cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
- NSURLConnection *theConnection =[[NSURLConnection alloc]
- initWithRequest:jsonRequest delegate:self];
- //NSURLConnection initiates the download of the content in the requested site
- [theConnection start];
- }
- #pragma mark - NSURLConnection Delegate
- //Pragma Mark is just for sorting, it doesn't do anything with the code
- - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
- //This
- methode is called if the Delegate got the message that the connection has
- finished downloading the content.
- NSLog(@"connectionDidFinishLoading");
- }
- - (void) connection:(NSURLConnection *)connection
- didReceiveData:(NSData *)data {
- //This methode is called if the Delegates got the message that the Data has been received
- //Here you can modify and use your Data
- //The Data that contains JSON code gets decoded, the new jsonDictionary contains the
- content of Data, decoded from JSON
- NSError* error = nil;
- self.jsonArray = [NSJSONSerialization JSONObjectWithData:data
- options:NSJSONReadingMutableContainers error:&error];
- if(error) {
- NSLog(@"Fail");
- }
- for(NSDictionary *server in jsonArray)
- {
- NSLog(@"Servername: %@", [server objectForKey:@"servername"]);
- NSLog(@"is_on: %@", [server objectForKey:@"is_on"]);
- NSString *path = [server objectForKey:@"servername"];
- NSString *truth = @"1";
- NSString *link1 = @"www.meineseite1.de";
- NSString *link2 = @"172.17.0.217";
- NSString *link3 = @"www.meineseite2";
- NSString *link4 = @"www.google.de";
- NSString *link5 = @"172.17.2.87";
- if([path isEqualToString:link1])
- {
- if([[server objectForKey:@"is_on"] isEqualToString:truth])
- {
- onOffView1.image = [UIImage imageNamed:@"on.png"];
- }
- else
- {
- onOffView1.image = [UIImage imageNamed:@"off.png"];
- }
- }
- else
- if ([path isEqualToString:link2])
- {
- if([[server objectForKey:@"is_on"] isEqualToString:truth])
- {
- onOffView2.image = [UIImage imageNamed:@"on.png"];
- }
- else
- {
- onOffView2.image = [UIImage imageNamed:@"off.png"];
- }
- }
- else if ([path isEqualToString:link3])
- {
- if([[server objectForKey:@"is_on"] isEqualToString:truth])
- {
- onOffView3.image = [UIImage imageNamed:@"on.png"];
- }
- else
- {
- onOffView3.image = [UIImage imageNamed:@"off.png"];
- }
- }
- else
- if ([path isEqualToString:link4])
- {
- if([[server objectForKey:@"is_on"] isEqualToString:truth])
- {
- onOffView4.image = [UIImage imageNamed:@"on.png"];
- }
- else
- {
- onOffView4.image = [UIImage imageNamed:@"off.png"];
- }
- }
- else if ([path isEqualToString:link5])
- {
- if([[server objectForKey:@"is_on"] isEqualToString:truth])
- {
- onOffView5.image = [UIImage imageNamed:@"on.png"];
- }
- else
- {
- onOffView5.image = [UIImage imageNamed:@"off.png"];
- }
- }
- }
- }
- -(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
- {
- return [self.jsonArray count];
- }
- -(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- {
- static NSString *CellIdentifier = @"Cell";
- UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
- if (cell == nil) {
- cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
- }
- NSDictionary *dictionary = [self.jsonArray objectAtIndex:[indexPath row]];
- cell.textLabel.text = [dictionary objectForKey:@"servername"];
- //nächste 2 zeilen wurden hier, im Forum aktualisiert
- NSString *comparer = [dictionary objectForKey:@"is_on"];
- if ([comparer isEqualToString:@"1"]) {
- [cell.contentView setBackgroundColor:[UIColor greenColor]];
- }
- else {
- [cell.contentView setBackgroundColor: [UIColor redColor]];
- }
- return cell;
- }
- @end
Wenn es was gibt was total anfängermäßig aussieht liegts daran, dass ich einer bin
Und aus Word kopieren (von texteditor zu win öffnet word das >_>) und dieses gefriemel mit dem mitschicken der formatierung ist sehr nervigDieser Beitrag wurde bereits 4 mal editiert, zuletzt von AlexSuo ()
-
Ok, jez verstehe ich gar nicht mehr.
Ich wollte nach links drehen das ganze, also layout left um das zu testen, plötzlich erscheint die tabelle einfach so bei genau dem code wo sie bei dem standart also senkrecht und gerade nicht zu sehen war. als ich sie zurückdrehte ist sie jez auch im standart verfügbar und ausgefüllt..
WOran kann das liegen? erst wenn ich auf panorama gehe wird die tabelle gefüllt..
Und ein anderes problem habe ich noch, ich will ja abfragen
Und natürlich ist es dann IMMER grün, weil ich es nicht hinbekomme einen vergleich herzustellen.
Ich kann kein isEqualToString nutzen und auch keinen einfachen vergleich.
Ich weiß nicht genau wie ich den vergleich schaffen kann.
gelöst. hab einfach vorher einfach noch einen NSString namens comparer gemacht und ihm den inhalt von objectForKey: @"is_on" zugewiesen, dann damit verglichen, funktioniert wunderbar. Ich komme mittlerweile schon selbst auf die lösungen, es geht voran
Code oben werd ich damit aktualisieren.
Das Einzige Problem was also noch besteht ist, dass die tableView erst ausgefüllt und angezeigt wird wenn ich einmal das Gerät geschwenkt habe sodass sich Panorama aktiviert, ab dann ist es immer da.Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von AlexSuo ()
-
AlexSuo schrieb:
Ok, jez verstehe ich gar nicht mehr.
Ich wollte nach links drehen das ganze, also layout left um das zu testen, plötzlich erscheint die tabelle einfach so bei genau dem code wo sie bei dem standart also senkrecht und gerade nicht zu sehen war. als ich sie zurückdrehte ist sie jez auch im standart verfügbar und ausgefüllt..
WOran kann das liegen? erst wenn ich auf panorama gehe wird die tabelle gefüllt..
Weil dann der TableView sich die Daten neu aus der DataSource holt. Wenn Du die Daten vom Server abgeholt hast, musst Du dem TableView ein reloadData schicken.
AlexSuo schrieb:
Und ein anderes problem habe ich noch, ich will ja abfragen
Und natürlich ist es dann IMMER grün, weil ich es nicht hinbekomme einen vergleich herzustellen.
Ich kann kein isEqualToString nutzen und auch keinen einfachen vergleich.
Ich weiß nicht genau wie ich den vergleich schaffen kann.
gelöst. hab einfach vorher einfach noch einen NSString namens comparer gemacht und ihm den inhalt von objectForKey: @"is_on" zugewiesen, dann damit verglichen, funktioniert wunderbar. Ich komme mittlerweile schon selbst auf die lösungen, es geht voran
Code oben werd ich damit aktualisieren.
In diesem konkreten Fall hilft Dir auch einfach:
Michael -
Und wo soll ich mir das senden? das tableview ist ja schon das letzte was die app macht, danach passiert ja nichts mehr scheinbar. Zumindest wird tableView wirklich nur in numberOfRowsInSection und in cellForRowAtIndexPath gekannt.
und es springt beim ersten starten nur in numberOfRowsInSection, aber nicht in cellForRowAtIndexPath. erst nach schwänken -
AlexSuo schrieb:
Und wo soll ich mir das senden?
Am besten in connectionDidFinishLoading: und in dieser Methode solltest Du auch erst Deine empfangenen Daten verarbeiten. Es ist nämlich nicht garantiert, dass Du Deine Daten in einem Stück angeliefert bekommst. Die Methode connection:didReceiveData: kann durchaus mehrfach aufgerufen werden. Lies das hier mal nach.
AlexSuo schrieb:
es springt beim ersten starten nur in numberOfRowsInSection, aber nicht in cellForRowAtIndexPath.
Und hast Du mal kontrolliert, was tableView:numberOfRowsInSection: da zurückgibt? Wetten da wird 0 zurückgegeben?
Michael -
nachdem du deinen jsonArray hast und die for Schleife kannst du dir sparen wenn du das mit dem is_on in die Methode cellForRowAtIndexPath implementierst mit der Abfrage
so mal kurz aus dem Kopf heraus, und lässt dann das mit dem cell.contentView weg[window close] -
Es wird tatsächlich nichts zurückgeliefert.
Aber wenn ich versuche die Daten in ConnectionDidFinishLoeading zu verarbeiten kommt exception mit Parameter 'data' is nil.
ich hab versucht data als globale variable zu verwenden..ging leider auch nicht. ich geh da glaub ein wneig falsch an die sache ran.
Die For schleife und das mit dem zuweisen der bilder ist was andres, darum gehts nicht, das funktioniert alles wunderbar. Aber da ich auch noch ein wenig lernen will und bisher nur mit festen variablen das kannte möchte ich jez gern das ganze als tableView gestalten, nur im moment hakts da ein wenig.
Ich danke aber für eure eifrige hilfe -
du solltest data als property deklarieren. Dann erzeugst du im receivedData immer ein neues Data Object inbdem du die neuen Daten an das alte dran hängst.
also so mal ganz einfach
im connection start:
im receivedData
und im didFinsh hast du dann den ganzen String.
Gruß
Claus2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.
Pre-Kaffee-Posts sind mit Vorsicht zu geniessen -
Danke dir, aber als ich gerade dabei war das ein wenig umzuschreiben um es zu testen, habe ich mir gedacht, wie kann ich mit einem string denn am ende das erreichen, was ich will?
-
Keine Ahnung was du willst, du kannst aber genauso gut ein NSData, ein NSMutableArray oder sonstwas nehmen. Es ist doch wurscht was für Daten du da empfängst
Gruß
Claus2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.
Pre-Kaffee-Posts sind mit Vorsicht zu geniessen -
Ja, entschuldige, sollte eigentlich sarastisch klingen, habs ja eingebaut, aber das problem mit dem nicht laden hats leider nicht gelöst.
-
Dann mach doch einfach mal eine Logger ausgabe in dem receiveData ob da überhaupt was nakommt2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.
Pre-Kaffee-Posts sind mit Vorsicht zu geniessen