iPhone SDK NSInternalInconsistencyException

时间:2010-10-21 15:45:23

标签: iphone protocols nsxmlparser

我一遍又一遍地撞墙,试图解决我在xcode中遇到的问题。我是新手,刚刚开始编码。

我正在尝试根据本教程创建一个XML解析器:http://cocoadevblog.com/iphone-tutorial-creating-a-rss-feed-reader

单独工作正常,但是当我将它实现到我自己的项目中时,由于以下代码,我得到'NSInternalInconsistencyException'错误:

----File: Parser.m----

- (void)parserDidEndDocument:(NSXMLParser *)parser {
 if ([_delegate respondsToSelector:@selector(parsedInformation::)]){
    [_delegate parsedInformation:information];
 }else{
        [NSException raise:NSInternalInconsistencyException
     format:@"Delegate (%d) doesn't respond to parsedInformation:", _delegate];
    }
}

我试图删除if-phrase,然后调用正确的函数,但是应该被覆盖的数据将无法通过。

项目设置

该项目是基于标签的应用程序。我有三节课:

  • 分析器
  • AlphaTab
  • RootDelegate

在RootDelegate中,我使用以下代码初始化选项卡视图,然后将AlphaTab初始化为tableView作为navigationView的一部分:

 ----RootDelegate.m ----

    tabBarController = [[UITabBarController alloc] init];
 alphaTab = [[AlphaTab alloc] initWithTabTitle:@"AlphaTab" navigationTitle:@"Exploring"];

UINavigationController *tableNavController = [[[UINavigationController alloc] initWithRootViewController:alphaTab] autorelease];
    tableNavController.delegate = self;
     [alphaTab release];  // creates your table view's navigation controller, then adds the created view controller. Note I then let go of the view controller as the navigation controller now holds onto it for me. This saves memory.

到目前为止一切都很好..当我使用解析给定XML文件的 Parser 类时,问题就出现了。此类已初始化并仅在AlphaTab中实现 - 因此它根本与RootDelegate类无关。初始化完成如下:

----File AlphaTab.m ----

- (void)loadData{
  if(information==nil){
  Parser *XMLParser = [[Parser alloc] init];
  [XMLParser parseFeed:@"http://frederikbrinck.com/bodil/Example.xml" withDelegate:self];
  [XMLParser release];
  }else {
     [self.tableView reloadData];
  }

}

我怀疑参数withDelegate的值“self”是问题,我认为它引用了超类RootDelegate,但我不确定。同样,我不知道将AlphaTab类的委托传递给函数,我认为这将解决问题。

我应该认为,问题可以从这条线上创造出来:

----FILE: Parser.h ----

@protocol AlphaTab <UITableViewDelegate>
- (void)parsedInformation:(NSArray *)i;
@end

我已经对协议和respondsToSelector进行了一些研究,但老实说,我并不太了解,因为我的代码是从程序化的角度看的,根本没有使用InterfaceBuilder,因为我已经被建议去做。它也没有导致解决问题。

为了进一步理解,我希望在解析信息时调用AlphaTab.m中的这个函数。

----FILE AlphaTab.m ----

- (void)parsedInformation:(NSArray *)i {
  NSLog(@"The parser has completed parsing");
   information = i;
  NSLog(@"This is the information: %d", [[information objectAtIndex:0] objectForKey:@"tabTitle"]);
    [self.tableView reloadData];
     }

我在网上看了一下,我发现了一些关于NSInternalInconsistencyException的解释。我也尝试过这样做,例如将每个人都当作代表。但是,我没有运气。最让我感到奇怪的是,当我使用Parser而不必将它的调用者(这种情况:AlphaTab)子类化为主类时,它就像一个魅力。

我希望你们能给我一些线索。如果您需要更多信息,请询问,我会处理。

// Brinck10

1 个答案:

答案 0 :(得分:0)

请参阅@warrenm及其评论。