0

私はObjective-Cを初めて使用し、2つのタブを持つアプリを作成しています。1つのタブでは、加速度計とジャイロスコープを読み取り、この値をラベルとプログレスバーで表示します。2つ目のタブでは、IP、ポートなどのネットワーク設定を行うことができます。ログ用のテキストフィールドもあります。

いくつか検索した後、[設定]タブ(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で「タイプが必要です」というエラーが発生する。

私の実装ファイルでは、メソッドhideKeyboardに次のコードが含まれているため、IPアドレスのテキストフィールドを変更すると実行されます。

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;
}

これは私のプロジェクトに関連するコードであり、この投稿に基づいています。ViewController間でのデータの受け渡し

次のエラーが発生します。「MotionViewController」の表示された@interfaceがセレクターを宣言していません
。MotionViewController.hで

よろしくお願いします

4

1 に答える 1

0

NetworkViewControllerをヘッダーファイル内のプロトコルで使用する前に、次を使用して前方宣言する必要があります。

@class NetworkViewController;

このようにして、コンパイラは、実際に宣言する前に、使用しているクラスを認識します。

于 2012-05-09T20:25:54.523 に答える