Я ударяю о стену снова и снова, пытаясь решить проблему, которую я получил в xcode. Я новичок и начал кодирование совсем недавно.iPhone SDK NSInternalInconsistencyException
Я пытаюсь сделать 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];
}
}
Я пытался удалить, если-фразу, а затем вызывает правильную функцию, но данные, которые, как предполагается, overhanded, не достучаться.
Настройка проекта
Проект является вкладка-приложение. У меня три класса:
- Parser
- AlphaTab
- RootDelegate
В RootDelegate я использовал следующий код для инициализации вкладки ракурс, а затем initialiaze в 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.
так хорошо до сих пор .. проблема возникает, когда я использую Pars er, который анализирует данный XML-файл. Этот класс инициализируется и реализуется только в 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, чтобы быть проблемы, которые я думаю, referres к суперкласса RootDelegate, но я не уверен. Аналогично, я не знаю, передать делегат класса AlphaTab функции, которая, я думаю, решит проблему.
Я должен думать, что эта проблема может быть создана из этой линии Aswell:
----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
Похоже, что у вас может быть дополнительный двоеточие в вашем имени селектора. – warrenm
Спасибо! Я узнал: D! –