Передача данных между ObjectClass и ViewController - PullRequest
0 голосов
/ 13 марта 2012

Я пытаюсь передать некоторые данные обратно в мой контроллер представления из класса объекта.

Это базовое представление о том, что делают классы и представления, и затем я покажу вам свой код.

Итак, ViewController загружает свои табличные ячейки.Затем внутри этого метода делегата он вызывает класс соединения, который я создал, внутри этого класса соединения есть методы 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];
}

Затем переходим к моему контроллеру представления, где я надеюсь вызвать протокол и получить обратно данные отфильтрованного массива.

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];

получает доступ нормально ... но он просто никогда не возвращается к контроллеру представления ... какие-то идеи ... я что-то упустил?... я в полной растерянности, работаю над этим весь день.

любая помощь будет с благодарностью оценена!:)

ОБНОВЛЕНИЕ:

Я добавил это в свой ViewController.h

//..
ParserClass *parserclass;
//..
@property (strong, nonatomic) ParserClass *parserclass;
//..

viewcontroller.m

@synthesize parserclass;
//..
//then I call this in viewdidload
[engineResponses setDelegate:self];

1 Ответ

0 голосов
/ 13 марта 2012

Как уже говорили другие в комментариях, ваша переменная pc освобождается в конце блока viewDidLoad, поскольку единственная ссылка, которую он имеет, выходит из области видимости. Если вы хотите, чтобы он продолжал жить, вы должны расширить его область (т.е. сделать его переменной экземпляра).

...