0

간단히하기 위해 뷰 컨트롤러 내의 함수간에 데이터를 공유하는 방법은 무엇입니까? 이상적으로, (아래) 나는 NSMutableDictionary를 사용하고 싶지만, 내 방식이 작동하지 않는 것 : ViewController.m에서Objective-C에서 뷰 컨트롤러의 함수간에 데이터를 공유하는 방법은 무엇입니까?

: 오류가

- (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 ' . 의견을 보내 주셔서 감사합니다.

답변

1

movieitem은 지역 변수이므로 다른 방법으로 사용할 수 없습니다.

따라서 메서드간에 변수를 공유하는 더 좋은 방법은 속성을 선언하는 것입니다.

아래 코드를 XXViewController.m 파일의 머리 부분에 추가하십시오.

@interface XXViewConttroller() 
@property(nonatomic,strong) NSMutableDictionary* movie; 
@end 

-(NSMutableDictionary*)movie{ 
    if(!_movie){ 
     _movie = [NSMutableDictionary dictionary]; 
    } 
    return _movie; 
} 

나는 .m 파일에서 "개인 속성"을 선언하고 해당 속성의 게터에서 변수를 초기화했습니다.

self.movie를 사용하여 코드의 다른 부분에서 속성을 호출 할 수 있습니다.

+0

감사를 당신의 movietem 사전을 사용할 수 있습니다 –

2

movieItem은 사용자가 만든 viewDidLoad 메서드 내에서만 유효한 로컬 변수이기 때문에 오류가 발생합니다. ivar 또는 속성을 만들어야합니다.

0

movieItem은 로컬 변수이며 viewDidLoad 메서드의 범위에서만 액세스 할 수 있습니다. 다른 기능으로 액세스하려면 전역 또는 속성을 사용하십시오.

0

.m 파일의 - (void) viewDidLoad 메소드로 사전을 만들었습니다.
이 의미에서 MutableDictionary는 viewDidLoad 메서드 내에서만 액세스 할 수 있습니다. 당신은
여기에 해결책

@interface에서의 ViewController 아래에이 코드를 추가입니다 (모든 방법으로 액세스 할 수 있음) *의 movietem 사전 공개를 할 수 있습니다 : 당신의 ViewController.h에있는 UIViewController 파일

@property (nonatomic, strong) NSMutableDictionary *movietem; 
// This line will create a public mutableDictionary which is accessible by all your methods in ViewController.m file 

이 코드를 아래에 추가하십시오. @ 구현체 ViewController in ViewController.m 파일

@synthesize movietem; // This line will create getters and setters for movietem MutableDictionary 


이제 당신은 명시 되, 어디서든 당신이 당신의 코드 당으로
을 원하는

- (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"]; 
... 
} 
관련 문제