2012-03-13 59 views
0

我想從對象類傳回一些數據到我的視圖控制器。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]; 
+1

你有沒有試過讓parserClass是一個通用變量而不是本地的viewdidload? – Eric 2012-03-13 02:24:51

+0

像埃裏克說,除非我錯誤理解弧的概念,你的電腦類只是生活整個viewdidload方法,即使你設置委託爲強,pc實例有一個強有力的鏈接到視圖控制器,但不是其他方式,所以一旦viewdid裝載完成pc類中的所有屬性都是零,並且弧物體將處置它。 – Pochi 2012-03-13 02:39:58

+0

我已添加MyClass * myclass;等等到ViewController的標題和@synthesized它..然後我已經調用[myclass setDelegate:self];並仍然沒有使它 - - (void)sendManufactureArray ...方法多數民衆贊成在viewcontroller ....( – 2012-03-13 03:24:37

回答

0

正如其他人的評論說,你pc變量在viewDidLoad塊的末尾被釋放,因爲它唯一的引用超出了範圍。如果你想讓它活着,你必須擴大它的範圍(即使它成爲一個實例變量)。

+0

沒錯,因此創建** @屬性(強,非原子)MyClass * myclass; **等然後綜合它? – 2012-03-13 03:18:09

+0

所以我已經使它成爲一個全局變量..但它仍然沒有解決問題..這是一個非常棘手的問題... – 2012-03-13 03:22:40

+0

你不需要使它成爲一個屬性,但添加將它添加到.h文件中的變量列表中。在@interface後面的大括號部分中添加該變量並將其分配給該變量,而不是在viewDidLoad方法內聲明pc。 – borrrden 2012-03-14 15:01:43

相關問題