2012-05-09 2 views
0

Я новичок в Objective-C, и я создаю приложение с двумя вкладками. На одной вкладке я считываю акселерометр и гироскоп и отображаю эти значения с помощью меток и индикаторов выполнения, вторая вкладка - это то, что я могу сделать некоторые сетевые настройки, такие как IP, Port, есть также текстовое поле для журналов.Использование делегатов и протоколов для передачи данных между двумя видами (вкладки)

После некоторых поисков я обнаружил, что наилучшим вариантом для передачи данных с вкладки настроек (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 поэтому он получает exetuded, когда я изменить текстовое поле для 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; 
} 

Это соответствующий код I, мой проект, i t на основе этой должности Passing Data between View Controllers.

Я получаю следующее сообщение об ошибке: Нет видимых @interface для 'MotionViewController' объявляет селектор»pushViewController анимированные
на [себе pushViewController: networkViewController анимированные: YES]; в MotionViewController.h

Большое спасибо заранее

+0

Не могли бы вы решить вашу проблему, используя свой ответ и комментарии? –

ответ

0

Вам необходимо переслать объявить NetworkViewController перед использованием его в протоколе внутри файла заголовка, используя

@class NetworkViewController; 

Этот способ компилятор знает о классе вы используете, прежде чем вы его объявляете.

+0

Спасибо, исправлена ​​ошибка, теперь я могу построить. Но строка не передается, я что-то пропускаю. Знаешь что? – user1385531

+0

Вы помещали оператор Nslog внутри функции, где вы отправляете строку, чтобы увидеть, действительно ли она вызвана? –

+0

Нет, но я использовал отладчик. Когда я вношу изменения в текстовое поле, функция запускается. – user1385531

Смежные вопросы