Variable is not a CFString bei UITableView

tertium

Registriert
Thread Starter
Dabei seit
31.10.2011
Beiträge
3
Reaktionspunkte
0
Hallo!
Ich arbeite gerade an einer iPhone App, bei der ich bei folgendem Problem nicht weiter komme. Dazu eine kurze Beschreibung. Ich lese Objekte aus einer XML-Datei aus. Diese Objekte bestehen eigentlich nur aus einer Membervariable vom Typ NSString.

Code:
@interface Article : NSObject {
    NSString *title;
}

@property (nonatomic, retain) NSString * title;

Diese einzelnen Objekte werden in ein NSMutableArray reingesteckt. Die einzelnen Objekte bzw. deren NSString titel soll nun als Label für eine UITableView verwendet werden.

Lese ich nun in meiner TableViewController-Klasse das NSMutableArray aus, das von einer anderen Klasse befüllt wird, und möchte ich dann das jeweilige Label auf eine Zelle der Table-View zuweisen, stürzt mein Programm ab.

Nach ein paar Debugging-Versuchen bin ich draufgekommen, dass in dem Moment wo ich auf mein NSMutableArray zugreife, zwar die einzelnen Objekte vorhanden sind. Aber die NSStrings (titeln) der jeweiligen Objekte nicht gespeichert sind. Dort tritt dann immer die Fehlermeldung "Variable is not a CFString" auf.

Woran liegt das? Wieso "verlier" ich plötzlich den NSString des Objekts?
Hat jemand einen Rat für mich?


(Genau mit der selben Technik befülle ich nämlich eine andere TableView und dort funktioniert das ohne Probleme")
 
Hallo Tertium,

kein Plan gerade was du da machst, bzw. wie du deine XML Datei aufgebaut hast. Das macht sich schwierig ohne ein wenig mehr Code. Ich würde jedoch versuchen, die Daten erst mal in der Klasse zu laden, wo du sie verarbeitest. Lädst du den Inhalt per deinMutableArray = [[NSMutableArray alloc] initWithContentsOfFile:"deineDatei"]; ? Weil wenn ich da was auslese bekomme ich keinen Fehler beim befüllen einer Tabelle.


Schöne Grüße, Sky.
 
Hallo!
also ich lade die Daten in der ViewDidLoad-Funktion der TableView...

mit folgendem Code
Code:
- (void)viewDidLoad
{

    
     xmlArticles = [[XMLArticleController alloc] loadXMLArticleList:@"http://localhost/sunoe/getArticlesOfCategory.php?catID=8"]; //ID hardcoded zum Test


    
   
    [self.tableView reloadData];
    
    [super viewDidLoad];
}


Meine variable xmlArcticles ist von dieser Klasse

Code:
#import <UIKit/UIKit.h>
#import "XMLArticleController.h"
#import "Category.h"



@class DetailViewController;
@class XMLArticleController;

@interface ArticlesViewController : UITableViewController {
    NSArray *contentArray;
    IBOutlet DetailViewController *dvController;
    XMLArticleController *xmlArticles;
    Category *currentCat;
    

    
    
}

@property (nonatomic, retain) IBOutlet DetailViewController *dvController;
@property (nonatomic, retain) XMLArticleController *xmlArticles;
@property (nonatomic, retain) Category *currentCat;

-(void) updateCurrentCat: (Category *) cat;




@end

und meine XML-Parser sieht wie folgt aus:
Code:
#import "XMLArticleController.h"
#import "Article.h"

@implementation XMLArticleController
@synthesize articlesOfCat;



-(id) loadXMLArticleList: (NSString *)urlString {
    articlesOfCat = [[NSMutableArray alloc] init];
    NSURL *url = [NSURL URLWithString: urlString];
    articleParser = [[NSXMLParser alloc] initWithContentsOfURL: url ];
    articleParser.delegate = self;
    [articleParser parse];
    return self;
}




-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *) qName attributes:(NSDictionary *)attributeDict {
    
    if ([elementName isEqualToString: @"article"]) {
        currentArticle = [Article alloc];
        currentArticleContent = [[NSMutableArray alloc] init];
    }
}


-(void)parser: (NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)string 
{
    if([elementName isEqualToString:@"title"]) {
        currentArticle.title = currentArticleContent;
    }
   
    if([elementName isEqualToString:@"article"]) {
        
        [articlesOfCat addObject:currentArticle];
        [currentArticle release];
        currentArticle = nil;
        [currentArticleContent release];
        currentArticleContent = nil;
    }
    
}


// --------------------------


-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *) string
{
    currentArticleContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];    
}


- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
    }
    
    return self;
}

@end


Der Fehler tritt jetzt genau dann auf, wenn ich die Zellen meiner TableView befüllen will... nämlich wie folgt:

Code:
- (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] autorelease];
    }
    
    // Configure the cell.
    NSMutableArray *articleCont = [xmlArticles articlesOfCat];
    Article *current = [articleCont objectAtIndex:indexPath.row];
    NSString *label = (NSString *) current.title;
       cell.textLabel.text = label;

    
    return cell;
}

An dieser Stelle

NSString *label = (NSString *) current.title;
cell.textLabel.text = label;

schmeißt es mein Programm immer, weil zwar meine Variable Current, ein Article ist, aber keine Daten besitzt und somit nix geladen werden kann.

Das witzige ist, dass ich genau diesselbe Technik an einer anderen Stelle mit einer anderen View verwendet und dort ohne Probleme verläuft..

vlt kann mir jetzt mit mehr code jemand helfen...

lg
 
Zurück
Oben Unten