Как в 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"];
...
} 
Другие вопросы по тегам