2012-05-09 9 views
0

私はObjective-Cの新機能で、2つのタブを持つアプリケーションを作っています。 1つのタブは加速度計とジャイロスコープを読み、ラベルとプログレスバーでこの値を表示する場所です。2番目のタブはIP、Port、ログ用のテキストフィールドなどのネットワーク設定を行うことができます。デリゲートとプロトコルを使用して2つのビュー(タブ)間でデータを渡す

いくつかの検索の後、設定タブ(NetworkViewController)と最初のタブ(MotionViewController)からデータを渡すのに最適なオプションが代理人とプロトコルを使用することがわかりました。

これは私のNetworkViewController.hです:

固定
@protocol ViewControllerNetworkDelegate <NSObject> 
- (void)PassDataToViewController:(NetworkViewController *)controller didFinishEnteringItem:(NSString *)item; 
@end 

@interface NetworkViewController : UIViewController 

@property (nonatomic, weak) id<ViewControllerNetworkDelegate> delegate; 

@property (strong, nonatomic) IBOutlet UITextField *addressField; 
@property (strong, nonatomic) IBOutlet UITextField *portField; 
@property (strong, nonatomic) IBOutlet UITextView *logField; 

- (IBAction)toggleUDP:(id)sender; 
- (IBAction)hideKeyboard:(id)sender; 

@end 

:私は "タイプを期待" と言ってPassDataToViewController法上のエラーを取得します。私はIPアドレスのためのテキストフィールドを変更すると、それがexetudedますので、私は、メソッドhideKeyboardに次のコードを持っている私の実装ファイルで

NSString *itemToPassBack =addressField.text; 
[self.delegate PassDataToViewController:self didFinishEnteringItem:itemToPassBack]; 

MotionViewController.h:

#import "NetworkViewController.h" 

@interface MotionViewController : UIViewController <ViewControllerNetworkDelegate> 

MotionViewController.m

- (void)viewDidLoad 
{ 
NetworkViewController *networkViewController = [[NetworkViewController alloc] initWithNibName:@"MotionViewController" bundle:nil]; 
networkViewController.delegate = self; 
[self pushViewController:networkViewController animated:YES]; 
} 

- (void)PassDataToViewController:(id)controller didFinishEnteringItem:(NSString *)item{ 
NSString *host= item; 
} 

これは私のプロジェクトです。私はこの投稿に基づいているのはPassing Data between View Controllersです。

次のエラーが表示されます。「MotionViewController」の表示されない@interfaceによって、セレクタのpushViewControllerが宣言されます。
オン[self pushViewController:networkViewController animated:YES];事前にMotionViewController.h

感謝

あなたのヘッダファイル中にあなたのプロトコルで使用する前に、あなたのNetworkViewControllerを宣言転送する必要が
+0

私の答えとコメントを使って問題を解決できますか? –

答えて

0

@class NetworkViewController; 

コンパイラはクラスについて知っているこの方法を使用して実際に宣言する前に使用しています。

+0

ありがとうございます、エラーは修正されました。ビルドできるようになりました。しかし、文字列は渡されません、私は何かが不足しています。知っていますか? – user1385531

+0

実際に呼び出されるかどうかを調べるために、文字列を送信する関数の中にNslogステートメントを入れましたか? –

+0

いいえ、私はデバッガを使用しました。テキストフィールドを変更すると、関数が実行されます。 – user1385531

関連する問題