2013-05-16 13 views
0

간단하다는 것을 알고 있기 때문에이 질문에 대해 무지하게 느낍니다. 목표 : 이탈 후 뷰에서 변수를 유지 한 다음 반환합니다. 예를 들어iOS보기에서 여러 변수를 그대로 둔 채로 두십시오.

:의 우리가 MAINVIEW, CategoryView과 (드럼 롤) Projectview로

응용 프로그램 MAINVIEW이 테이블을 표시 열립니다 있다고 가정 해 봅시다 - 사용자들은 카테고리를 선택하려면 선택합니다. 이 segue는 카테고리 뷰입니다. 선택이 완료되면 선택한 카테고리를 MainView으로 다시 보냅니다. via

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 

여기에 문제가 없습니다. MainView는 변수를 수신하고 '카테고리'섹션에서 선택한 카테고리를 하위 텍스트로 표시합니다. 다음으로 사용자가 프로젝트 이름을 선택하려고합니다 (미리 정의 된 목록이기도합니다). 항목을 선택하고 변수를 MainView로 보냅니다.

- 지금 누군가가 나에게 설명 할 수 있습니다 (부드럽게) 왜 내가 메인 뷰로 돌아 왔을 때 이전에 '선택된'카테고리를 보유하고 있던 NSString 변수가 이제 null입니까?

내 NSString selectedProject가 올바르게 유지되지 않습니다? 내가 여기서해야 할 올바른 구현은 무엇입니까? 아니면 나는 무엇을 놓치고 있습니까? 나는 정말로 무슨 일이 일어나고 있는지 이해하려고 노력하고있어 어떤 것도 큰 도움이 될 것입니다.

MAINVIEW 인터페이스

@interface MainViewController : UIViewController { 
     NSString *selectedProjectName; 
     NSString *selectedCategory; 
    } 

    @property (nonatomic, retain) NSString *selectedProjectName; 
    @property (nonatomic, retain) NSString *selectedCategory; 

    @end 

MAINVIEW 구현

@implementation MainViewController 
    @synthesize selectedCategory, selectedProjectName; 

당신은 .. Projectview로 구현 필요하면

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    if ([[segue identifier] isEqualToString:@"masterSegue"]) { 
    MainViewController *vc = (MainViewController *)[segue destinationViewController]; 

    LogValues *lv = [LogValues alloc]; 

    lv.project = @"Test Project Name"; 
    vc.selectedProjectName = lv.project; 
    } 
    } 
,
+0

아마도 기본보기로 "돌아 오지"않기 때문에 아마도 새로운 인스턴스를 만들 것입니다. 어떻게 메인 뷰 (어떤 종류의 세그)로 "뒤로"가야합니까? – rdelmar

+0

돌아온다 나는 segue가 모달로 설정되어있다 –

답변

0

좋아, 문제는 당신이 같은 인스턴스로 돌아 오지 않는다는 것입니다. 당신은 segues에 대해 매우 중요한 것을 놓쳤습니다. 항상 새로운 View Controller를 인스턴스화합니다. 따라서 모달보기 버튼을 사용하여 메인 뷰 컨트롤러로 "돌아갈"때, 당신은 단지 그 컨트롤러의 새로운 인스턴스를 생성하는 것입니다. 당신은 unwind segue 이외의 것을 사용하여 스토리 보드에서 (이전 컨트롤러로) 뒤로 이동해서는 안됩니다. 풀기 (Unwinds)는 항상 새로운 인스턴스를 생성하는 segues에 대한 규칙의 예외입니다.

그래서 두 가지 선택 사항이 있습니다. 당신은 unwind segue를 사용할 수 있습니다. 좋은 방법입니다. 왜냐하면 prepareForSegue를 구현하여 목적지 컨트롤러로 데이터를 다시 보내거나 segue를 전혀 사용할 수 없기 때문에 dismissViewControllerAnimated : completion :를 사용하여 돌아가서 데이터를 다시 보내기 위임자.

+0

긴장을 푸는 방법을 모르는 경우 여기 내 대답을 참조하십시오. http://stackoverflow.com/a/16160239/1285133 – rdelmar

+0

훌륭한 사람입니다. 설명에 감사드립니다. 나는 긴장을 푸는 것을 들여다 볼 것이다. 나는 아직 그 이야기를 듣지 못했다. –

-1

게시하는 즉시 당연히 도움이된다고 생각하는 쪽의 실이 보입니다. 해결책은 잘 작동하는 AppDelegate에 값을 저장하는 것이 었습니다.

그러나 AppDelegate에 의존하지 않고도 동일한 결과를 얻을 수있는 다른 방법이 있으며 다른 솔루션을 듣고 싶어합니다.

+0

이것이 나쁜 방법이라면 잘 동작한다. - 더 적절한 방법에 대해 설명해 주시겠습니까? 그것은 작은 일일 응용 프로그램에 불과 8 변수 그래서 나는 이런 식으로 해를보고 해달라고합니다. 그냥 최선을 배우려고. –

관련 문제