私は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で
よろしくお願いします