我一遍又一遍地撞墙,试图解决我在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,然后调用正确的函数,但是应该被覆盖的数据将无法通过。
项目设置
该项目是基于标签的应用程序。我有三节课:
在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
答案 0 :(得分:0)
请参阅@warrenm及其评论。