我想從對象類傳回一些數據到我的視圖控制器。ObjectClass和ViewController之間傳遞數據
這是關於什麼類和視圖正在做什麼的基本概念,然後我會告訴你我的代碼。
所以ViewController加載它的tableviewcells。然後在這個委託方法裏面調用一個我創建的連接類,裏面的那個連接類是NSURLConnection方法連接並從數據庫下載數據,在connectionDidFinishLoading方法中,我設置了一個解析類,並傳遞所有下載的數據到那個。 然後我解析這些數據,並在parserDidEndDocument中的解析器結束時,我試圖將現在在數組變量中的數據發送回我的視圖控制器來顯示。但是..由於某種原因,我的協議和代表不工作。 我已經在m解析器類中設置了協議,並在我的視圖控制器中設置了委託,但它從來沒有使它成爲我的協議方法。
我會告訴你我的代碼如下。
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];
被訪問的罰款..但它只是從來沒有使它回到視圖控制器..任何想法......我失去了什麼? ..我完全失去了,一直在這一天工作。
任何幫助將HUGELY讚賞! :)
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 2012-03-13 02:24:51
像埃裏克說,除非我錯誤理解弧的概念,你的電腦類只是生活整個viewdidload方法,即使你設置委託爲強,pc實例有一個強有力的鏈接到視圖控制器,但不是其他方式,所以一旦viewdid裝載完成pc類中的所有屬性都是零,並且弧物體將處置它。 – Pochi 2012-03-13 02:39:58
我已添加MyClass * myclass;等等到ViewController的標題和@synthesized它..然後我已經調用[myclass setDelegate:self];並仍然沒有使它 - - (void)sendManufactureArray ...方法多數民衆贊成在viewcontroller ....( – 2012-03-13 03:24:37