iPhone SDK NSInternalInconsistencyException - PullRequest
0 голосов
/ 21 октября 2010

Я снова и снова бьюсь о стену, пытаясь решить проблему, возникшую в 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, а затем он вызываетправильная функция, но данные, которые должны быть перезаписаны, не пройдут.

Настройка проекта

Проект представляет собой приложение на основе вкладок.У меня есть три класса:

  • Парсер
  • AlphaTab
  • RootDelegate

В RootDelegate я использовал следующий код для инициализациипредставление вкладки, а затем инициализировать AlphaTab как табличное представление, являющееся частью навигационного представления:

 ----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.

Пока все хорошо ... проблема возникает, когда я использую класс Parser ,который анализирует данный файл 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];
  }

}

Я подозреваю, что проблемой является параметр со значением self "Delegate", который, я думаю, относится к суперклассу RootDelegate, но я не уверен.Кроме того, я не знаю, передать ли делегату класса AlphaTab функцию, которая, я думаю, решит проблему.

Я должен подумать, что проблема может быть создана из этой строки также:

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

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

Я провел некоторое исследование о протоколах и responseStoSelector, но, честно говоря, я не очень много понял, так как мой код рассматривается с программной точки зрения, без использования 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 голосов
/ 27 декабря 2012

Пожалуйста, смотрите @warrenm и его комментарий.

...