2016-12-27 5 views
-1

Ich versuche, ein UITableView in meinem Viewcontroller zu füllen (es ist ein Delegierter von UITableView)UITableView nicht angezeigt Inhalt

Der Code unten etwas, das ich online gefunden habe. Ich habe einige Änderungen vorgenommen, so dass ich keinen UITableViewController brauchte, um ihn zu benutzen. Aber seit ich es geändert habe, kann ich nicht herausfinden, wie der Text in den Zellen gedruckt wird. Bevor ich den Code ändere, um meiner ViewcController-Unterklasse zu erlauben, ein Delegierter von UITableView zu sein. Kann mir jemand in die richtige Richtung zeigen?

empty UITableView

Ich habe überprüft und die XML richtig Parsen. Wenn der Code die if (marrXMLData.count != 0) im startParsing Verfahren erreicht, marrXMLData größer als 0 (8 spezifisch ist, die richtige und Gesamtanzahl der Elemente in meinem XML)

Code ist aus: http://www.theappguruz.com/blog/xmlparsing-with-nsxmlparser-tutorial

.m unter

DisplayTableViewController 

@synthesize marrXMLData; 
@synthesize mstrXMLString; 
@synthesize mdictXMLPart; 

- (void)viewDidLoad{ 
    [super viewDidLoad]; 
    [self startParsing]; 
} 

- (void)startParsing{ 
    NSData *fileData = [NSData dataWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"file.xml"]]; 
    NSXMLParser *xmlparser = [[NSXMLParser alloc] initWithData:fileData]; 
    [xmlparser setDelegate:self]; 
    [xmlparser parse]; 
    if (marrXMLData.count != 0) { 
     [self.myUITableView reloadData]; 
    } 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict;{ 
    if([elementName isEqualToString:@"Content"]) 
     marrXMLData = [[NSMutableArray alloc] init]; 
    if([elementName isEqualToString:@"item"]) 
     mdictXMLPart = [[NSMutableDictionary alloc] init]; 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;{ 
    if(!mstrXMLString) 
     mstrXMLString = [[NSMutableString alloc] initWithString:string]; 
    else 
     [mstrXMLString appendString:string]; 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName;{ 

if([elementName isEqualToString:@"title"] || [elementName isEqualToString:@"url"]){ 

     [mdictXMLPart setObject:mstrXMLString forKey:elementName]; 

    } 
    if([elementName isEqualToString:@"item"]) 

     [marrXMLData addObject:mdictXMLPart]; 
     mstrXMLString = nil; 

    } 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section{ 
    return [marrXMLData count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 

    cell.textLabel.text = [[[marrXMLData objectAtIndex:indexPath.row] valueForKey:@"title"] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
    cell.detailTextLabel.text = [[[marrXMLData objectAtIndex:indexPath.row] valueForKey:@"url"] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

    return cell; 
} 

@end 

EDIT:

Nach etwas mehr diese Methode mit ihm spielen nicht

genannt werden
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

Im Beispielcode wird es aufgerufen, aber ich weiß nicht wo. (Entschuldigung, ich bin sehr neu in iOS)

+0

Ihre Frage ist zu vage, um beantwortbar zu sein. "Ich kann nicht herausfinden, wie der Text auf dem Etikett gedruckt werden kann." Was bedeutet das? Welcher Text? Welches Etikett? Erhalten Sie die richtige Anzahl von Zellen? Erhalten Sie Inhalt in der Textbeschriftung, aber nicht die Detailtextbeschriftung, die Detailbeschriftungsbeschriftung, aber nicht die Beschreibungsbeschriftung oder keine von beiden? Welcher Code löst Ihre XML-Analyse aus und füllt Ihr XML-Datenarray auf? –

+0

Dieser Code setzt voraus, dass '[xmlparser parse]' vor dem '[self.myUITableView reloadData]' läuft und beendet wird. Stellen Sie zunächst sicher, dass 'self.myUITableView reloadData' nach dem syntaktischen Analysieren mit nslog oder breakpoints aufgerufen wird Vergewissern Sie sich, dass das Array "marrXMLData" Objekte enthält. Eine quicjk aber schlechte Lösung würde Ihre '[self.myUITableView reloadData]' an das Ende von didEndElement '(void) Parser: (NSXMLParser *) Parser didStartElement' –

+0

Hallo @DuncanC Ich habe ein paar Änderungen gemacht, um besser zu erklären. Ich versuche Zellen in einem UITableView zu füllen. Das Label wäre in der Zelle – Airagale

Antwort

2

Es klingt wie die Delegate und/oder dataSource Links der Tabellenansicht nicht verbunden sind. Wenn Sie die Tabellenansichts-Szene in IB (Interface Builder) einrichten, ziehen Sie einfach mit der Maus aus der Tabellenansicht auf den View-Controller.

+0

Wenn Sie Control + Drag auf den View-Controller sagen, meinen Sie damit, ein IBOutlet für das UITableView in der .h-Datei zu erstellen? – Airagale

+0

Nein. Wenn Sie die Tabellenansicht und den richtigen Inspektor auswählen (ich vergesse, wie es heißt, und ich bin nicht auf meinem Mac. Connections Inspector?), Dann sehen Sie ein Element für den Delegaten und für die Datenquelle. Sie müssen in der Schnittstelle Ihres View-Controllers einen Eintrag hinzufügen, der angibt, dass er den UITableViewDataSource- und UITableViewDelegate-Protokollen entspricht, und dann aus der Datenquelle ziehen und Verbindungen auf den View-Controller delegieren. –

+0

Ich konnte finden, wovon du sprichst, eines der IB. Ich versuchte zu klicken und schleppte stören die Datenquelle und den Vertreter zum Ansichtsteuerpult, aber es würde nicht verbinden. Stattdessen habe ich es programmatisch in meiner viewDidLoad Funktion [myUITableView setDelegate: self]; und [myUITableView setDataSource: self]; – Airagale

Verwandte Themen