2013-12-11 2 views
0

첫 번째 iOS 앱을 개발 중이며, 좋은 MVC 관행을 고수하고 유지 관리 및 재개발을 쉽게하기 위해 컨벤션을 마련했습니다. 나는 스토리 보드를 사용하고 있으며 주로 내 앱을 탐색하기 위해 푸시 (Push) 세그 (Segues)를 사용할 것이다. 여기 내 스토리 보드의 스냅 샷이 있습니다. 클릭하면 직원을 추가푸시 한 뷰 컨트롤러에서 정보를 다시 뷰 컨트롤러로 전송하는 방법은 무엇입니까?

enter image description here

는 푸시 SEGUE이 직원을 선택하는 이동합니다. 직원 선택을 마치고 내가 원하는 직원을 선택하고 이전 VC로 돌아갈 수 있습니다. 각 VC에는 자신의 .m.h이 있는데, UIViewController에서 서브 클래 싱했다는 것을 언급해야합니다. 다음은 사용될 때의 모습입니다.

enter image description here

지금 나는 처음 VC로 다시 선택된 데이터 행을 전송에 벽돌 벽에 충돌했습니다. 내 문제는 내가 데이터를 VC로 밀어 넣은 VC에서 데이터를 가장 잘 전송하는 방법을 모른다는 것입니다. Select Staff VC에는 선택된 행의 문자열을 올바르게 보유하는 배열 ( currentSelected)이 있지만 일단 롤백하면 Create VC에서이 배열에 액세스하려고합니다.

어떻게 최선이 일을 가야합니까?

P. 이 질문과 비슷한 질문이 있다는 것을 알아 차릴 가치는 있지만, 약간 씩 다른 이슈, 다소 복잡하거나 오래된 Xcode의 이전 버전 인 XIB와 XBOX에 관한 것입니다. 과거에 나는이 문제에 관한 문헌을 연구 중이었고 효과적인 전진을 할 수 없었기 때문에이 질문을 한 이유를 설명하기를 바랍니다.

답변

4

당신은 블록 또는 대리자를 사용할 수 있습니다. 논리적으로 코드 그룹을 유지하기 때문에 개인적으로 블록을 권장합니다. 블록을 사용하면 그런 식으로해야합니다. @interface에 그 후

// I use NSString as an example but for your project more accurate would be NSArray 
typedef void (^ReturnBlock)(NSString *arg); 

을하지만 @end 전에 속성을 추가합니다 : 당신의 SelectStaff.h 파일에서 인터페이스 전에 형식 정의 추가 당신이 아마 (데이터가 SelectStaff.m에서

@property(copy) ReturnBlock returnBlock; 

당신의 save : method or dismiss :) 전달하려는 데이터로 블록을 호출하십시오. prepareForSegue에 CreateViewController.m에서

if (returnBlock) 
    returnBlock(@"Data will be passed do previous view controller"); 

:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"YOUR_IDENT_FROM_STORYBOARD"]) 
    { 
     SelectStaff *selStuff = (SelectStaff*)[segue destinationViewController]; 
     [selStuff setReturnBlock:^(NSString *arg){ 
      // This are your data 
      NSLog(@"Arg: %@", arg); 
     }]; 
    } 
} 

희망이 도움말 : 블록을 추가합니다.

+0

첫 번째 VC에 긴장을 풀기 직전에 호출되는 함수를 제공하는 API가 있습니까? 예를 들어, 항목을 선택하고 뒤로 버튼을 클릭합니다. 하지만 VC가 닫히기 전에 그 함수가 호출되고 if (returnBlock) ...을 수행 한 다음 VC를 닫을 수 있습니다. 당신의 CreateViewController에서 –

+0

당신은 예를 들어, SEGUE을 다른 즐거움과 휴식을 체험 할 방법을 추가 할 수 있습니다 : - (IBAction를) unwindToRed : (UIStoryboardSegue *) unwindSegue {SelectStaff * selectStaff = unwindSegue.sourceViewController; } 필요한 데이터를 읽을 수 있고 블록 할 필요도 없습니다. 스토리 보드에서 종료 아이콘에서이 작업으로 드래그하는 것을 기억하십시오. – Greg

+0

조언 해 주셔서 감사합니다. 제안한 코드를 구현했지만이 오류가 있습니다. 제안 사항이 있습니까? http://i.imgur.com/UbLpbnU.png –

관련 문제