2009-05-12 5 views
1

여러보기에서 "ship class"라고 말하면 클래스 인스턴스 하나에 액세스하는 방법에 대해 궁금합니다.Cocoa Touch에서 여러보기에 걸쳐 하나의 인스턴스

내가 rootViewController와 3 개의 하위보기, 하나의 Main, 하나의 전투 및 하나의 착륙을한다고 가정 해 보겠습니다. 어디에서 내 배에 대한 모든 정보를 저장하고 다른 뷰를 통해 액세스하는 클래스의 인스턴스를 어디에 구현해야합니까? 우주선에 미사일이 남았을 때 다른 사람이 어떻게 그 정보에 액세스하여 그것을 표시 할 수 있습니까? 기본보기에서 실행하면 방문보기에서 그 정보를 어떻게 얻습니까?

나는 쉬운 방법이 있어야한다는 것을 알고 있으며,보기 자체에서 배 클래스를 구현하지 않으면 어떻게해야하는지 생각합니다. 나는 아직도 아이폰을위한 프로그래밍에 상당히 새로운 것이다.

모두 도움을 주셔서 감사합니다.

답변

3

Ship 클래스의 단일 인스턴스를 만든 후에는 다른보기에 해당 인스턴스가 무엇인지 알려야합니다. 그래서 당신은 그것을 만든 학급에서 공공 재산을 만들 수 있습니다. 다음, 다른 파일에, 당신은

[[[UIApplication sharedApplication] delegate].myShip getNumberOfMasts]; 

이 간단하고, 간단한 프로젝트를 위해 작동 뭔가를 쓰기 싶지만, 그것은을 않습니다 -

@property (nonatomic, retain) Ship* myShip; 

클래스를 가정 앱의 대표입니다 프로젝트의 모든 파일에서 Ship 개체를 사용할 수 있습니다. 이는 효과적으로 글로벌 데이터가되어 큰 프로젝트에서 디버깅하기가 어려울 수 있습니다. (myShip에 나쁜 일이 일어나면 어떤 객체가 책임이 있습니까? 앱에 객체가있을 수 있다면 액세스가 필요한 두 클래스로 제한되는 것보다 디버그하는 것이 더 어렵습니다.) 그래서, 우주선에 대한 액세스를 제한하고 myShip을 공용 속성으로 만들지 말고 액세스를 필요로하는 다른 객체를 만들 때 myShip을 만든 객체에 초기화 호출을 전달하십시오. 이 경우,이

[[myBattleController alloc] initWithShip:myShip]; 

같은 뭔가 정말 하나는 전체 응용 프로그램에 대해 하나의 선박 객체, 단일 개체를 만드는 방법에 대한 조언을 스택 오버 플로우에 대한 검색입니다.

+0

두 개 이상의 배가있는 경우 배의 배열이있는 단일 객체가 이동하는 방법이 될 수 있습니다. – tmadsen

1

배송 클래스는 MVC (모델 뷰 컨트롤러)의 모델입니다. 독립 실행 형 클래스입니다. 3 개의보기는 MVC의보기 부분입니다. 누락 된 것은 컨트롤러뿐입니다. 컨트롤러는 모델 (예 : 선박 클래스)과 조회수를 생성하고이 모든 것에 대한 참조를 보유합니다.

컨트롤러는 응용 프로그램의 '허브'입니다. 뷰에서 사용자 입력을 받고 모델에서 작업을 실행 한 다음보기에서 화면을 새로 고침합니다.

보기에 데이터를 전달하는 데는 몇 가지 방법이 있습니다. 가능한 옵션은 데이터를 전달할보기 (예 :보기에 대한 정보 표시)를 추가하는 것입니다. 두 번째 옵션은 각보기가 모델에 대한 참조를 유지하는 것입니다.이 옵션은 '읽기 전용'액세스에만 사용됩니다. 예 : 뷰를 다시 표시해야하는 경우 모델 (선박 클래스)에서 정확한 데이터를 가져옵니다.

MVC 패턴을 살펴 보겠습니다. Apple 설명서에도 많은 정보가 있습니다.

관련 문제