我正在尝试将一些数据从对象类传递回我的视图控制器。
这是关于类和视图正在做什么的基本视图,然后我将向您展示我的代码。
所以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];
答案 0 :(得分:0)
正如其他人在评论中所说的那样,pc
块中的viewDidLoad
变量正在被释放,因为它的唯一引用超出了范围。如果你希望它继续存在,你必须扩大其范围(即使它成为一个实例变量)。