2010-04-15 5 views
0

내가 일하고있는 아이폰 앱은 주기적으로 종료 중입니다 ... 여러 뷰 컨트롤러 사이에서 공유 NSArray에 액세스하는 방법 때문에 느낌이 들었습니다. . 그래서 ...제대로 하나의 UIViewController에서 NSArray/NSMutableArray를 전달하는 방법

여러 ViewController 중 NSArray/NSMutableArray를 전달하는 가장 좋은 방법은 무엇입니까? 모두 수정하거나 설정할 수 있습니다. 당신은 아마 그것을 유지하지 않는

감사

답변

3

일반적으로 두 가지 방법이 있습니다. 당신의 다음 뷰 컨트롤러를 인스턴스화 할 때 첫 번째 방법에서

는, 현재 (빨리에 이전 또는 상위) 뷰 컨트롤러에서 "상속"을 배열 속성을 설정할 수 있습니다 :

MyNextViewController *_myNextViewController = [[MyNextViewController alloc] initWithNibName:@"MyNextViewController" bundle:nil]; 
_myNextViewController.myViewControllerArray = self.myViewControllerArray; 
... 

두 번째 방법에서는 응용 프로그램 위임에 myAppDelegateArray 속성을 만들고 응용 프로그램이 초기화 될 때 배열을 인스턴스화하거나 필요에 따라 인스턴스화 할 수 있습니다.

그러면 뷰 컨트롤러를 포함한 모든 클래스에서이 속성에 대한 getter를 호출 할 수 있습니다.

예를 들어, MyNextViewController의 인스턴스 내에서, 당신은 속성이 myViewControllerArray라고 할 수도 있습니다 다음과 같이 당신은 그것을 설정합니다 :

self.myViewControllerArray = [UIAppDelegate myAppDelegateArray]; 

당신은, 파일을 응용 프로그램 상수 어딘가에 예를 #define 문을 추가합니다 :

#define UIAppDelegate ((MyAppDelegate *)[UIApplication sharedApplication].delegate) 

또는 원하는 경우, 전체 [UIApplication sharedApplication].delegate 전화를 사용합니다.

일반적인 접근 방식으로 사람들은 원하는 속성에 대한 액세스를 분산화하기 때문에 앱 위임 방식을 선호하는 것처럼 보입니다.

이 방법을 사용하면 뷰 컨트롤러를 재정렬하거나 새로운 뷰 컨트롤러를 VC 계층에 삽입 할 때 참조가 항상 앱에서 사용할 수 있으므로 부모 뷰 컨트롤러에서 상속 된 하위 뷰 컨트롤러 속성을 디버깅 할 필요가 없습니다 대리자.

+0

사람들을 가르치는 좋은 디자인 기술이 아니기 때문에 "Globals.h와 같은 응용 프로그램 대리자 사용"접근법을 개인적으로 권장하지 않습니다. 클래스 속성을 사용하여 객체를 전달하는 것은 훨씬 질서 정연합니다. –

+0

저는 실제로 이러한 디자인에 대한 찬반 의견을 듣고 싶습니다. 나는 그들에 대해 두 가지 생각을 갖고 있으며 최근에 코드를 더 많이 재사용 할 때 애플 리케이션 위임 접근법을 사용하는쪽으로 기울어졌습니다. –

+0

호기심에서 ... 전달되는 공유 NSArray를 재설정하는 가장 좋은 방법은 무엇입니까? 릴리즈를 수행하거나 nil로 설정하십시오. 또한 NSarray = nil을 Controller A IF Controller B에 설정하고 C에 retain을 설정하면 어떤 효과가 있습니까? 감사합니다. – wgpubs

0

, 그것은 할당이 해제됩니다 당신은 다시 액세스하기 위해 노력하고 있습니다. 완료되면 [myArray retain]을 보내고 (각 컨트롤러에서) [myArray release]를 보내십시오.

관련 문제