Я пытаюсь передать некоторые данные обратно в контроллер вида из класса объектов.Передача данных между ObjectClass и ViewController
Это базовое представление о том, какие классы и представления делают, а затем я покажу вам свой код.
So ViewController загружает свои таблицы. Затем внутри этого метода делегата он вызывает класс соединения, который я создал, внутри этого класса conection - методы NSURLConnection, соединяющие и загружающие данные из базы данных, в методе connectionDidFinishLoading этого класса соединения. Я настроил класс разбора и передал все загруженные данные к этому. Затем я разбираю эти данные, и в конце этого анализатора внутри parserDidEndDocument я пытаюсь отправить данные, которые теперь находятся в переменной массива, обратно на мой контроллер отображения для отображения. Однако ... по какой-то причине мои протоколы и делегаты не работают. Я установил протоколы внутри класса m parser и задал делегаты в моем контроллере представления, но никогда не применял его к методу протокола.
Я покажу вам мой код ниже.
parserclass.h
@protocol PassParsedData <NSObject>
@required
- (void)sendManufactureArray:(NSArray *)array;
@end
//..
id <PassParsedData> delegate;
//..
@property (strong) id delegate;
//
parserclass.m
#import "VehicleSearchViewController.h"
//..
@synthesize delegate;
//..
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
//.. array stuff is set up and i can log it so i know its working.. i just want to show you the protocol and delegate stuff to be clear
[[self delegate]sendManufactureArray:filteredArray];
}
Затем перейти на мой взгляд, контроллер, где я надеялся вызвать протокол и получить данные filteredArray обратно.
ViewController.h
#import "EngineResponses.h" //delegates & protocols
//..
@interface SearchViewController : UITableViewController <PassParsedData> {
//..
Viewcontroller.h
#import "EngineResponses.h"
//..
- (void)viewDidLoad
{
[super viewDidLoad];
//..
parserClass *pc = [[parserClass alloc] init];
[pc setDelegate:self];
//..
}
- (void)sendManufactureArray:(NSArray *)array //Breakpoint here is never accessed
{
FilterArray = array;
[self.tableView reloadData];
}
Как вы можете видеть в этом последнем методе, который является протоколом я звоню, его никогда не обращались к теме. Я проверил, этот вызов
[[self delegate]sendManufactureArray:filteredArray];
получает доступ к хорошо .. но это просто никогда не делает его обратно в View Controller .. любые идеи ... я пропускаю что-нибудь? .. im при полной потере, работал над этим весь день.
любая помощь была бы высоко оценена! :)
UPDATE:
Я добавил это к моему ViewController.h
//..
ParserClass *parserclass;
//..
@property (strong, nonatomic) ParserClass *parserclass;
//..
viewcontroller.m
@synthesize parserclass;
//..
//then I call this in viewdidload
[engineResponses setDelegate:self];
Вы пытались сделать parserClass универсальной переменной вместо локальной для viewdidload? – Eric
Как сказал Эрик, если я не пропущу концепцию дуги, ваш класс pc будет жить только по методу viewdidload, даже если вы установили делегат как сильный, экземпляр pc имеет прочную связь с viewcontroller, но не с другой стороны arround, так что скоро, когда loaddid load завершает все свойства в классе pc, будет nil, и дуговая вещь избавится от него. – Pochi
Я добавил MyClass * myclass; и т. д. в заголовок ViewController и @synthesized it .. тогда я назвал [myclass setDelegate: self]; и все же он не делает это для метода sendManufactureArray ..., который находится в viewcontroller .... :( –