在ObjectClass和ViewController之间传递数据

时间:2012-03-13 02:06:14

标签: iphone ios delegates protocols

我正在尝试将一些数据从对象类传递回我的视图控制器。

这是关于类和视图正在做什么的基本视图,然后我将向您展示我的代码。

所以ViewController加载它的tableviewcells。然后在这个委托方法里面调用我创建的连接类,在连接类里面是连接和下载数据的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 ..任何想法......我错过了什么? ..我完全失去了,一整天都在努力。

任何帮助都会非常感激! :)

更新:

我已将此添加到我的ViewController.h

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

viewcontroller.m

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

1 个答案:

答案 0 :(得分:0)

正如其他人在评论中所说的那样,pc块中的viewDidLoad变量正在被释放,因为它的唯一引用超出了范围。如果你希望它继续存在,你必须扩大其范围(即使它成为一个实例变量)。