Установить делегат для контроллера Subview - PullRequest
0 голосов
/ 09 ноября 2010

Я уверен, что есть простой способ решить эту проблему, но я не могу понять.

Я получил TabBarViewController с несколькими представлениями. В некоторых представлениях я загружал таблицы с содержимым на основе XML.

Мой XML Parser работает нормально, я тестировал его раньше в отдельном Projectfile. Проблема в том, что мой TableViewController, для которого я создал XMLAppDelegate для управления синтаксическим анализом моих xml-файлов, по-прежнему отправляет методы в основной файл делегирования моего проекта.

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MainAppDelegate slices]: unrecognized selector sent to instance 0x6d1fd00'

Как показано в сообщении об ошибке, он пытается отправить его в мой MainAppDelegate вместо XMLAppDelegate.

Я реализовал XMLAppDelegate в моих файлах контроллера и инициализировал делегата следующим образом:

Файл .h моего контроллера

#import <UIKit/UIKit.h>

@class XMLAppDelegate, NewsDetailViewController;

@interface NewsViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource> {
    IBOutlet UITableView *newsTableView;    
    XMLAppDelegate *appDelegate;
    NewsDetailViewController *ndvController;
}

@end

Файл .m моего контроллера

- (void)viewDidLoad {
[super viewDidLoad];
// self.navigationItem.rightBarButtonItem = self.editButtonItem;

appDelegate = (XMLAppDelegate *)[[UIApplication sharedApplication] delegate];

self.title = @"Slices";

}

Контроллер загружается в TabBarView в виде отдельного файла .xib. В этом nib-файле я подключил делегат и источник данных к моему XMLAppDelegate.

Я все еще получаю эту ошибку в журнале, и приложение вылетает, когда я пытаюсь переключиться на вкладку, если в ней нужен TableViewController.

Надеюсь, вы понимаете мою проблему. Может быть, кто-то может сказать мне, что я делаю неправильно, устанавливая Delegate для моего XMLAppDelegate.

EDIT:

Чтобы объяснить, что я хочу сделать:

У меня есть класс XMLParser для анализа файла, класс Slice для хранения элементов и XMLAppDelegate. Из этих файлов я получаю свои результаты XML, хранящиеся в массиве с именем «ломтики».

Чтобы использовать элементы массива для отображения его в виде таблицы или текстовой метки, я подключил TableViewController к XMLAppDelegate (который анализирует мой XML-документ с использованием файла XMLParser и сохраняет данные в массиве).

Элементы этого массива ранее объявлялись в файлах как строки, подобные этой

@property (nonatomic, readwrite) NSInteger sliceID;
@property (nonatomic, retain) NSString *image;
@property (nonatomic, retain) NSString *title;
@property (nonatomic, retain) NSString *text;

Но, как я уже сказал, парсер работает. Я думаю, что моя проблема, кажется, в том, что я запросил appDelegate.slices, но селектор не мой XMLAppDelgate. В сообщении об ошибке говорится, что используется главный делегат, у которого нет свойств файла делегата xml.

TabView загружает NewsViewController, который вызывает массив в XMLAppDelegate. Я реализовал файлы, подключил делегат к TableView в качестве источника данных и делегата, но, тем не менее, кажется, что он принимает основного делегата.

Это сводит меня с ума. Проект представляет собой профиль компании для хорошего Wellness Motel. Я получаю содержимое из CMS в виде XML-файлов, и мне необходим доступ к ним из XMLAppDelegate, который доставляет содержимое сайтов.

Надеюсь, вы понимаете мой плохой английский. ;)

Ответы [ 2 ]

0 голосов
/ 09 ноября 2010

Итак, теперь вы объявили свойство , но не реализовали его.Объявление свойства, помимо прочего, объявляет, что вы реализуете один или два метода доступа для свойства.Таким образом, недостаточно (пока) просто объявить свойство;Вы также должны реализовать методы доступа, которые делают это свойство реальным во время выполнения.

Самый простой способ исправить это - синтезировать методы доступа для свойства slices.Если вам нужно какое-то нестандартное поведение, вы можете реализовать его самостоятельно, но это не похоже на это - синтезировать это не только самое простое, но, вероятно, правильное решение.

См. документацию по свойствам для получения дополнительной информации.

0 голосов
/ 09 ноября 2010

Может быть, я понятия не имею, как насчет вашего XMLappDelegate, но, по моему мнению,

[[UIApplication sharedApplication] delegate]

всегда дает вам основной AppDelegate, во что бы вы его ни вводили.Может быть, вам следует добавить ссылку на ваш XMLAppDelegate в свой основной делегат приложения и объявить его как свойство, тогда вы можете получить доступ к XMLAppDelegate с помощью

AppDelegate.xmlDelegate

Опять же, я не совсем понимаю, что вы пытаетесьделай .. может это и так здорово;)

...