2016-07-17 5 views
0

나는 ViewController 클래스를가집니다.UIViewController와 범주 충돌 사이의 데이터 전달

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

이 항목의 세부 사항을 엽니 다 : 그것은 실행하는 카테고리 ViewController (Details) 있습니다.

ViewController 클래스에 새 버튼을 추가 할 때 NSArray *myData이라는 데이터를 다른 컨트롤러 (예 : SearchController)로 전달하고 싶습니다. 그러나 내 prepareForSegue은 내부에 ViewController (Details)이므로 실행되지 않습니다. 따라서 prepareForSegueViewController에 추가하는 것은 무시하는 것 같습니다.

SearchController 작동 ViewController (Details) 내부 prepareForSegue의 버전을 작업 사용하는 경우 그러나 바르 NSArray *myDataViewController에 선언 볼 수 없습니다. 이상적으로는 새로운 데이터 변수가 무의미하기 때문에 ViewController (Details)에 설정되도록 선언하고 싶지는 않습니다.

ViewControllerprepareForSegue 또는 ViewController (Details)을 실행하지 않으면 버튼 탭에서 데이터를 전달하는 방법에 데이터 변수가 표시되지 않습니까? 어떤 추천?

+0

CoreData, Realm 또는 Static 참조와 같이 데이터를 먼저 저장하는 데는 별 상관이 없습니다. 여기서 중요한 점은 데이터에 단방향 흐름을 사용하면 클래스간에 데이터를 전달할 필요가 없으므로이 문제가 다시 발생하지 않을 것입니다. 대신 단일 진리 소스에서 항상 데이터를 가져오고 그게 다야. –

+0

코드를 보여주십시오 --- 오직 관련 코드 --- VC와 카테고리에서. – danh

+0

그리고 @ JanCssio는 꽤 옳습니다. vcs는 앱의 모델 자체에 액세스해야합니다. 예를 들어 사용자가 vcA에서 모델의 일부 측면을 선택하고 vcB의 작업이 세부 정보를 제시하는 경우와 같이 vCA가 통신하는 한 vcA가 vcB에 "데이터를 전달"하는 것이 합당하고 필요합니다. 선택. – danh

답변

0

필요할 때까지 범주를 사용하지 않아야합니다. 대신 하위 모듈에서 큰 클래스를 나누어야 할 경우 클래스와 복합 패턴을 사용해야합니다. 카테고리는 클래스의 메소드를 오버라이드하고 정의되지 않은 순서로로드되므로 동일한 메소드를 구현하는 여러 카테고리로 인해 디버그 문제가 매우 어려워 질 수 있습니다. 카테고리는 ivars보다 추악하고 많은 비용이 드는 연관된 객체를 사용하지 않고 인스턴스에 아무 것도 저장할 수 없습니다.

관련 문제