Как в Objective-C можно обмениваться данными между функциями в контроллере представления?
Стремясь к простоте, как можно обмениваться данными между функциями в контроллере представления? В идеале я хотел бы использовать NSMutableDictionary, но мой подход, кажется, не работает (ниже):
В ViewController.m:
- (void) viewDidLoad{
...
NSMutableDictionary * movietem = [[NSMutableDictionary alloc] init];
[movieItem setValue:@“frozen” forKey:@“title” ];
[movieItem setValue:@“PG” forKey:@“rating” ];
[movieItem setValue:@“tom cruise” forKey:@“cast” ];
....
}
-(IBAction) updateTitleBtn:(UIButton *)sender{
…
[movieItem setValue:@"lion king" forKey:@"title"];
...
}
-(IBAction) updateCastBtn:(UIButton *)sender{
…
[movieItem setValue:@"forest whitaker" forKey:@"cast"];
...
}
Вывод по ошибке: "Неизвестный получатель" movieItem. Спасибо за вклад.
4 ответа
movieitem является локальной переменной, поэтому его нельзя использовать в других методах.
Таким образом, лучший способ поделиться переменной между методами - объявить свойство.
Попробуйте добавить приведенный ниже код в заголовок ваших файлов XXViewConttroller.m.
@interface XXViewConttroller()
@property(nonatomic,strong) NSMutableDictionary* movie;
@end
-(NSMutableDictionary*)movie{
if(!_movie){
_movie = [NSMutableDictionary dictionary];
}
return _movie;
}
В котором я объявил "частное свойство" в файлах.m и инициализировал переменную в гетто свойства.
Вы можете использовать self.movie для вызова свойства в другой части вашего кода.
Вы получаете эту ошибку, потому что movieItem - локальная переменная, которая действительна только в методе viewDidLoad, где вы ее создали. Вам нужно создать ивар или свойство.
movieItem является локальной переменной и будет доступен только в области видимости метода viewDidLoad. чтобы получить доступ к нему в другой функции, пожалуйста, сделайте его глобальным или используйте свойство.
Вы создали свой словарь в методе -(void)viewDidLoad в файле.m.
В этом смысле ваш MutableDictionary доступен только внутри метода viewDidLoad. Вы можете сделать свой словарь * movietem общедоступным (доступным для всех методов)
Вот решение
Добавьте этот код ниже @interface ViewController: UIViewController в вашем файле ViewController.h
@property (nonatomic, strong) NSMutableDictionary *movietem;
// This line will create a public mutableDictionary which is accessible by all your methods in ViewController.m file
Теперь добавьте этот код ниже @implementation ViewController в файле ViewController.m
@synthesize movietem; // This line will create getters and setters for movietem MutableDictionary
Теперь вы можете использовать свой словарь movietem где угодно
Согласно вашему коду,
- (void) viewDidLoad {
...
movietem = [[NSMutableDictionary alloc] init]; // allocating memory for movietem mutable Dictionary
[movieItem setValue:@“frozen” forKey:@“title” ];
[movieItem setValue:@“PG” forKey:@“rating” ];
[movieItem setValue:@“tom cruise” forKey:@“cast” ];
....
}
-(IBAction) updateTitleBtn:(UIButton *)sender {
...
[movieItem setValue:@"lion king" forKey:@"title"];
...
}
-(IBAction) updateCastBtn:(UIButton *)sender{
...
[movieItem setValue:@"forest whitaker" forKey:@"cast"];
...
}