Uczę się jak używać KVO. Stworzyłem dwie klasy, Truck and Driver, jak pokazano poniżej.Jak przekazywać wartości za pomocą KVO?
klasa Truck ma pole tekstowe i przycisk, tekst powinien zawierać aktualną prędkość ciężarówki, a po naciśnięciu przycisku należy wywołać prepareForSegue
i zawiera on kod zamieszczony poniżej.
Klasa Driver zawiera pole tekstowe, które należy wypełnić prędkością wózka. prędkość wózka w klasie Truck zostanie przekazana do pola tekstowego w klasie Driver przez KVO, jak pokazano w kodzie.
Problem jaki mam lub co próbuję zrobić to, gdy użytkownik wejdzie w prędkość ciężarówki w klasie Ciężarówka i naciśnie przycisk, chcę wyświetlić prędkość ciężarówki wprowadzoną w polu tekstowym w klasie Kierowca przez KVO
wynikiem jestem coraz według kodu zamieszczonych poniżej, pustym polu tekstowym w klasie sterowników
proszę dać mi znać, dlaczego TextField w klasie kierowcy jest pusty. a jak mam przekazać wartość prędkości wózka z klasy do klasy Truck kierowcy przez KVO
Truck.m
#import "TruckViewController.h"
#import "DriverViewController.h"
#import "ServerViewController.h"
@interface TruckViewController()
@property (strong, nonatomic) IBOutlet UITextField *textFieldCurrenSpeed;
@property (strong, nonatomic) IBOutlet UIButton *buttonBroadcast;
@property (strong, nonatomic) IBOutlet UIButton
*buttonToDriverViewController;
@property (strong, nonatomic) IBOutlet UIButton
*buttonToServerViewController;
@property (strong, nonatomic) TruckViewController *truck;
@property (strong, nonatomic) DriverViewController *driver;
@property (strong, nonatomic) ServerViewController *server;
@end
@implementation TruckViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
self.truck = [[TruckViewController alloc] init];
self.driver = [[DriverViewController alloc] init];
self.server = [[ServerViewController alloc] init];
if ([segue.identifier isEqualToString:@"segueToDriver"]) {
[self.truck addObserver:self.driver
forKeyPath:@"currentSpeedOfTheTruck"
options:NSKeyValueObservingOptionNew
context:NULL];
self.truck.currentSpeedOfTheTruck = [self.textFieldCurrenSpeed
text];
NSLog(@"prepareForSegue: %@", self.truck.currentSpeedOfTheTruck);
}
if ([segue.identifier isEqualToString:@"segueToServer"]) {
[self.truck addObserver:self.server
forKeyPath:@"currentSpeedOfTheTruck"
options:NSKeyValueObservingOptionNew
context:NULL];
self.truck.currentSpeedOfTheTruck = [self.textFieldCurrenSpeed
text];
NSLog(@"text entered: %@", self.truck.currentSpeedOfTheTruck);
}
}
- (void)dealloc
{
[self.truck removeObserver:self.driver
forKeyPath:@"currentSpeedOfTheTruck"];
[self.truck removeObserver:self.server
forKeyPath:@"currentSpeedOfTheTruck"];
}
Driver.m
#import "DriverViewController.h"
@interface DriverViewController()
@property (strong, nonatomic) IBOutlet UITextField
*textFieldCurrentSpeed;
@end
-(void) observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary<NSKeyValueChangeKey,id>
*)change
context:(void *)context {
if ([keyPath isEqualToString:@"currentSpeedOfTheTruck"]) {
NSLog(@"DriverViewController->currentSpeedOfTheTruck: %@",
[object valueForKey:keyPath]);
NSLog(@"DriverViewController->currentSpeedOfTheTruck: %@",
[change objectForKey:NSKeyValueChangeNewKey]);
self.receivedCurrentSpeed = [change
objectForKey:NSKeyValueChangeNewKey];
[self.textFieldCurrentSpeed setText:self.receivedCurrentSpeed];
}
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
NSLog(@"DriverViewController->viewDidLoad");
[self.textFieldCurrentSpeed setText:self.receivedCurrentSpeed];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
wyjściowego dziennika:
2017-08-13 19:53:55.293 KVC-1[91529:2346883] DriverViewController-
>currentSpeedOfTheTruck: 45
2017-08-13 19:53:55.294 KVC-1[91529:2346883] DriverViewController-
>currentSpeedOfTheTruck: 45
2017-08-13 19:53:55.294 KVC-1[91529:2346883] prepareForSegue: 45
Co to jest wyjście dzienników? –
@ AminNegm-Awad zobacz dane wyjściowe dziennika opublikowane – user2121