2012-03-13 11 views
0

オブジェクトクラスからビューコントローラにデータを戻そうとしています。ObjectClassとViewController間でデータを渡す

これは、どのようなクラスやビューが行われているのかに関する基本的な見解です。次に、自分のコードを表示します。

So ViewControllerは、そのtableviewcellsを読み込みます。次に、このデリゲートメソッドの内部で、接続クラスを呼び出します。そのコネクションクラスの中にNSURLConnectionメソッドがあります。この接続クラスのconnectionDidFinishLoadingメソッドでデータベースに接続してデータをダウンロードします。解析クラスを設定し、ダウンロードしたデータをすべて渡します。それ以上。 次に、そのデータを解析し、parserDidEndDocument内のそのパーサの終わりに、配列変数にあるデータをビューコントローラに送って表示しようとしています。しかし、何らかの理由で私のプロトコルと代理人が働いていません。 mパーサクラス内でプロトコルを設定して、ビューコントローラでデリゲートを設定しましたが、それを自分のプロトコルメソッドに渡すことはありません。

以下に私のコードを示します。

parserclass.h

@protocol PassParsedData <NSObject> 
@required 
- (void)sendManufactureArray:(NSArray *)array; 
@end 
//.. 
id <PassParsedData> delegate; 
//.. 
@property (strong) id delegate; 
// 

私は、プロトコルを呼び出し、バックfilteredArrayデータを取得するために期待しています私のビューコントローラ上に移動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]; 

は細かいアクセスします..しかし、それはバックビューコントローラにそれをしないだけで決して? ..完全な損失で私はこの一日中働いています。

ご迷惑をおかけして申し訳ございません。 :)

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

+0

エリックは、アークの概念をミスしない限り、あなたのPCクラスはviewdidloadメソッドだけではなく、あなたが強力なデリゲートを設定したとしても、PCインスタンスはviewcontrollerへの強いリンクを持っています。 viewdidのロードが終了するとすぐに、pcクラスのすべてのプロパティはnilであり、アーク物はそれを破棄します。 – Pochi

+0

MyClass * myclassを追加しました。等ViewControllerのヘッダーには@synthesized ..それから私は[myclass setDelegate:self]を呼び出しました。それでも、それは - (void)sendManufactureArray ... viewcontrollerのメソッドthatsにしていません....( –

答えて

0

にこれを追加した

はコメントの中で述べている、あなたのpc変数でありますviewDidLoadブロックの最後に割り当てが解除されています。これは、そこに含まれる唯一の参照が範囲外になるためです。それを有効にするには、そのスコープを拡大する(インスタンス変数にする)必要があります。

+0

右。**プロパティ(強い、非原子的な)MyClassを作成することです。 * myclass; ** etcそれを合成するのですか? –

+0

ですから、グローバル変数にしました..しかし、まだ問題を解決していません。これは本当に粘着的な問題です... –

+0

プロパティを追加する必要はありませんが、追加してくださいその変数を.hファイルの変数リストに追加します。その変数を@interfaceの後の中括弧の部分に追加し、viewDidLoadメソッド内でpcを宣言するのではなく、その変数に代入します。 – borrrden

関連する問題