2010-10-26 3 views
1

J'ai cette erreur lors de la construction et l'exécution de mon projet dans Xcode: RootViewController peut ne pas répondre à -parseXMLFileAtURL: je tente de développer la base apple RSS Reader à partir du tutoriel à l'adresse:Objective-C « RootViewController » ne peut pas répondre à « -parseXMLFileAtURL: » erreur dans Xcode

http://gigaom.com/apple/tutorial-build-a-simple-rss-reader-for-iphone/

ma section de code que cette erreur se produit dans ressemble à ceci:

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    if ([stories count] == 0) 
    { 
     NSString * path = @"http://feeds.feedburner.com/TheAppleBlog"; 
     [self parseXMLFileAtURL:path]; 
    } 
    cellSize = CGSizeMake([newsTable bounds].size.width, 60); 
} 

quelqu'un peut-il expliquer pourquoi cette commande parseXMLFileAtURL donne tant de chagrin d'amour?

Merci

MISE À JOUR * * *

Je définis également parseXMLFileAtURL dans le même fichier; cependant, j'ai placé cette section du code après la méthode viewDidAppear (mon mauvais). Donc, quand je change l'ordre des méthodes, cette erreur disparaît. Mais quand je fais cela, je reçois une autre erreur, peut-être que vous pouvez aussi aider avec cette erreur! voici:

classe RootViewController ne met pas en œuvre le protocole NSXMLParserDelegate

dans cette section de code:

- (void)parseXMLFileAtURL:(NSString *)URL 
{ 
    stories = [[NSMutableArray alloc] init]; 
    NSURL *xmlURL = [NSURL URLWithString:URL]; 
    rssParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL]; 
    [rssParser setDelegate:self]; 
    [rssParser setShouldProcessNamespaces:NO]; 
    [rssParser setShouldReportNamespacePrefixes:NO]; 
    [rssParser setShouldResolveExternalEntities:NO]; 
    [rssParser parse]; 
} 

L'erreur se produit après la ligne: [rssParser setDelegate:self]; - ce qui pourrait être mal à cela?

+0

Pourriez-vous poster l'erreur s'il vous plait? – kodai

Répondre

2

En ce qui concerne votre deuxième question que RootViewController ne sont pas conformes au protocole NSXMLParserDelegate. Il suffit de l'ajouter comme ceci dans votre fichier RootViewController.h:

@interface RootViewController : UIViewController <NSXMLParserDelegate> { ..... 
+0

dans mon fichier d'en-tête J'ai déjà: @interface RootViewController: UITableViewController {// détails de la méthode //} @ fin. Pourquoi cela ne fait-il pas déjà ce que vous suggérez? – sadmicrowave

+0

Oui, il suffit d'ajouter le avant le { – Ciryon

+0

Brillant !! qui a résolu le problème !! merci beaucoup! – sadmicrowave

1

Question stupide: Est-ce que votre classe RootViewcontroller a une méthode nommée -parseXMLFileAtURL: définie? Si -parseXMLFileAtURL: vient après la méthode qui l'appelle, vous devrez également le déclarer dans votre en-tête.

+0

Merci pour l'aide. – sadmicrowave

0

Assurez-vous que vous avez parseXMLFileAtURL défini dans votre RootViewController.m

-(void)parseXMLFileAtURL:(NSString *)url 
{ 
    ... 
} 

Et assurez-vous que vous l'avez défini dans votre tête comme:

-(void)parseXMLFileAtURL:(NSString *)url; 

Aussi, assurez-vous que lorsque vous essayez d'obtenir la contenu à partir du Web, vous utilisez un NSURL, pas un NSString. Vous pouvez instancier un NSURL avec une chaîne par:

NSURL *urlFromString = [[NSURL alloc] initWithString:@"http://..."]; 
+0

Nice, merci mec, consultez mon OP pour une question mise à jour si. – sadmicrowave

+0

D'accord, aussi loin que votre commentaire NSURL va; J'ai essayé de changer ma chaîne NSString dans ma méthode viewDidAppear à ce que vous avez suggéré et maintenant je reçois une erreur de la ligne [self parseXMLFileAtURL: path] directement en dessous. L'erreur indique "Structures Objective-C incompatibles 'struct NSURL *', attendu 'struct NSString *' lors de la transmission de l'argument ..." – sadmicrowave

Questions connexes