2013-12-19 1 views
0

누군가 나를 위해이를 분명히 할 수 있습니다. I 3 4 2에보기 컨트롤러 (1)로부터 탐색 할 때 지금정수 값은 방법에 따라 변경되지 않습니다.

-(id)init 
{ 
    // Call the superclass's designated initializer 
    self = [super initWithStyle:UITableViewStyleGrouped]; 
    if (self) { 

    editStarted = 0; // NO 
    } 
    return self; 
} 

: I 4 UITableViewControllers이

, 첫 번째 난 FirstViewController이 속성을 설정

@property (nonatomic, assign) int editStarted; 

특성을 갖는다 , 그리고 FourthViewController에서 다음과 같이하십시오 :

FirstViewController *firstView = [[FirstViewController alloc] init]; 
    NSLog(@"editStarted: %d,",firstView.editStarted); 

NSLOG는 0을 인쇄합니다. 나는 다음이 값 것을 인쇄됩니다 그것을 초기화의 또 다른 가치를 부여) 그래서 다시 FirstViewController에서

난이 값을 1로 변경 않습니다.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
editStarted = 1; 
} 

을 지금은에 뷰 컨트롤러 1에서 탐색 할 때 2 - 3 - 4 값은 1로 변경되지 않았지만 여전히 0입니다.

이 표준적인 동작입니까? 아니면 잘못된 것입니까? editStarted을 뷰 컨트롤러 1에서 2에서 3에서 4로 전달할 수있는 가능성이 있다고 생각했지만 올바른 방법인지는 확실하지 않습니다. 나에게 약간 과장된 것처럼 들린다.

답변

2

이 :

FirstViewController *firstView = [[FirstViewController alloc] init]; 

는 VC (1)와 같은 클래스의 새로운 인스턴스를 생성하지만 원래 보았다 같은 인스턴스가 아닌, 그래서 다른 설정이 있습니다.

'실제'VC 1을 가져 와서 설정을 기록하려면 탐색 컨트롤러를 사용해야합니다.


하나의 VC에서 다음 VC로 변수를 전달하는 것이 표준 접근 방식이지만 수행하려는 작업에 따라 다릅니다. 어떤 경우에는 예를 들어 NSUserDefaults에 값을 설정하는 것이 더 좋을 수 있으므로 여러 다른 화면에서 확인/사용/변경할 수 있습니다.

+0

...

달리 한 번만 클래스의 객체를 만들/하위 클래스에 상위 클래스의 객체를 할당하는 더 나은 옵션이 있습니다! 고맙습니다. 그리고 네비게이션 컨트롤러를 사용하면 "- (BOOL) application : (UIApplication *) application didFinishLaunchingWithOptions : (NSDictionary *) launchOptions "등을 정의하는 appDelegate.m을 의미합니다. – Eloy

+0

그리고 정보를 얻으려면보기 컨트롤러 1에서 4로 이동하고 4시에 VC1에서 2에서 4까지의 데이터를 표시하려고합니다. 저는 2 대 4를 사용하여 특정한 선택을합니다. – Eloy

+1

VC에서 'self.navigationController'는 nav 컨트롤러로 연결됩니다. 위임 관계는 선택 데이터를 2, 3 및 4에서 1로 다시 전달하는 데 적합합니다. – Wain

0

당신은 동일한 클래스의 새 인스턴스를 생성하여 새 메모리를 할당합니다. 그래서 새 메모리는 항상 0으로 표시됩니다.

그래서 당신은 그 의미가 있습니다, 물론

관련 문제