オブジェクトクラスからビューコントローラにデータを戻そうとしています。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];
parserClassをviewdidloadのローカルではなく汎用変数にしようとしましたか? – Eric
エリックは、アークの概念をミスしない限り、あなたのPCクラスはviewdidloadメソッドだけではなく、あなたが強力なデリゲートを設定したとしても、PCインスタンスはviewcontrollerへの強いリンクを持っています。 viewdidのロードが終了するとすぐに、pcクラスのすべてのプロパティはnilであり、アーク物はそれを破棄します。 – Pochi
MyClass * myclassを追加しました。等ViewControllerのヘッダーには@synthesized ..それから私は[myclass setDelegate:self]を呼び出しました。それでも、それは - (void)sendManufactureArray ... viewcontrollerのメソッドthatsにしていません....( –