【问题标题】:Objective-C 'RootViewController' may not respond to '-parseXMLFileAtURL:' error in xCodeObjective-C 'RootViewController' 可能无法响应 xCode 中的 '-parseXMLFileAtURL:' 错误
【发布时间】:2011-04-30 21:29:57
【问题描述】:

在 xCode 中构建和运行我的项目时出现此错误: RootViewController 可能不会回复 -parseXMLFileAtURL: 我正在尝试从以下教程中开发基本的 Apple RSS 阅读器:

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

发生此错误的代码部分如下所示:

- (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); 
}

谁能解释为什么这个parseXMLFileAtURL 命令会让人如此心痛?

谢谢

更新***

我也在同一个文件中定义了parseXMLFileAtURL;但是,我将那部分代码放在viewDidAppear 方法之后(我的错)。因此,当我更改错误消失的方法的顺序时。但是当我这样做时,我得到另一个错误,也许你们也可以帮助解决这个错误!在这里:

RootViewController 类没有实现 NSXMLParserDelegate 协议

在这段代码中:

- (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];
}

错误出现在以下行之后:[rssParser setDelegate:self]; - 这可能有什么问题?

【问题讨论】:

  • 你能把错误贴出来吗?

标签: objective-c cocoa xml-parsing


【解决方案1】:

关于您的第二个问题,RootViewController 不符合NSXMLParserDelegate 协议。只需将其添加到您的 RootViewController.h 文件中即可:

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

【讨论】:

  • 在我的头文件中我已经有了:@interface RootViewController : UITableViewController {//method details//}@end.为什么那还没有按照你的建议做?
  • 是的,只需在 { 之前添加
【解决方案2】:

愚蠢的问题:您的RootViewcontroller 类是否定义了一个名为-parseXMLFileAtURL: 的方法?如果-parseXMLFileAtURL: 出现在调用它的方法之后,您还需要在标题中声明它。

【讨论】:

    【解决方案3】:

    确保在 RootViewController.m 中定义了 parseXMLFileAtURL

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

    并确保在标题中将其定义为:

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

    另外,请确保当您尝试从网络获取内容时,您使用的是NSURL,而不是NSString。您可以通过以下方式用字符串实例化 NSURL:

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

    【讨论】:

    • 很好,谢谢老兄,不过请查看我的 OP 以获取更新的问题。
    • 好吧,就您的 NSURL 评论而言;我尝试将我的 viewDidAppear 方法中的 NSString 字符串更改为您建议的内容,现在我从它正下方的 [self parseXMLFileAtURL:path] 行中收到一个错误。错误提示“传递参数时不兼容的 Objective-C 类型 'struct NSURL *',预期的 'struct NSString *'...”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多