У меня возникли проблемы с пониманием того, какие классы могут читать какие переменные в других классах. Я читал много разных вещей в Интернете и, похоже, не нашел здесь ничего твердого. Я буквально потратил впустую последние два дня, пытаясь заставить мою программу работать, но никакие классы не могут читать какие-либо другие переменные классов. Любая помощь будет оценена.Инкапсуляция данных, переменная экземпляра недоступна
Это мой ViewController.h:
@interface ViewController : UIViewController
{
@public
NSString *nameOfLabel;
}
@property (strong, nonatomic) IBOutlet UILabel *firstLabel;
- (IBAction)Switch:(id)sender;
- (IBAction)changeLabel:(UIButton *)sender;
-(NSString *) nameOfLabel;
@end
nameOfLabel является публичной переменной и должен быть в состоянии получить доступ к внеклассной, верно?
ViewController.m:
#import "ViewController.h"
#import "NewView.h"
@interface ViewController()
@end
@implementation ViewController
- (IBAction)Switch:(id)sender {
NewView * new = [[NewView alloc] initWithNibName:nil bundle:nil];
[self presentViewController: new animated:YES completion:NULL];
}
- (IBAction)changeLabel:(UIButton *)sender {
nameOfLabel = @"Test Name";
_firstLabel.text = nameOfLabel;
}
-(NSString *) nameOfLabel {
return nameOfLabel;
}
@end
changeLabel кнопка меняет * firstLabel.text на "имя Test".
второй класс NewView.h:
#import "ViewController.h"
@interface NewView : UIViewController
@property (strong, nonatomic) IBOutlet UILabel *secondLabel;
- (IBAction)changeSecondLabel:(UIButton *)sender;
@end
и NewView.m:
#import "NewView.h"
@interface NewView()
@end
@implementation NewView
{
ViewController *view;
}
- (IBAction)changeSecondLabel:(UIButton *)sender {
view = [[ViewController alloc] init];
_secondLabel.text = view.nameOfLabel;
}
@end
changeSecondLabel должны изменить secondLabel.text к nameOfLabel, который является 'название Test', однако, этикетка на самом деле исчезает, что заставляет меня думать, что имяOfLabel не может быть достигнуто. Ive играл с именемOfLabel, создавая его @property, а затем синтезируя его, а также пытающийся помещать его в {NSString * nameOfLabel; } в @implementation, но я все равно получаю тот же результат.
Хорошо, я удалил эту строку и все еще не работает. Даже если бы я должен был перейти к следующему виду и не изменитьLabel на первом представлении, метка все равно исчезнет. – PappaSmalls
Это, безусловно, не сработает, если вы не сделаете «view» точкой для действительного объекта (то есть того, который имеет нужный ярлык). Если все, что вы делали, это удалить одну строку, вы перешли от использования нового объекта к тому, чтобы вообще ничего не использовать. –
Как я могу сделать точку зрения на метку первого ViewController? – PappaSmalls