2014-05-21 2 views
2

현재 사용자에 따라 컨트롤러 스택을 만드는 앱에서 작업하고 있습니다.여러보기 컨트롤러를 밀고 터뜨리면 임의의 충돌이 발생합니다.

기본적으로 UIViewControllerUIButton이고 다른 하나는 UIView Controller입니다. 다른보기 컨트롤러 등으로 연결되는 버튼이 있습니다. 뷰 컨트롤러는 푸시 (push)되므로 사용자가 항상 버튼을 누르면 여러 개의 뷰 컨트롤러 스택이 생성됩니다. 사용자가 이전 뷰 컨트롤러로 돌아가고 싶을 때마다 뷰가 팝업됩니다.

모든 것이 잘 작동합니다 (푸시 및 팝). 그러나 무작위로 앱이 다운됩니다. 이미 많은 양의 뷰가 푸시되고 메모리 문제가 될 수 있다고 의심되는 경우가 발생했습니다.

뷰 컨트롤러를 밀어 넣는 것 외에 다른 방법으로 스택 된 뷰를 피할 수 있습니까? 누적 된보기 때문에 충돌이 아닌 것일 수도 있습니다. 그러나 나는 뭔가를 놓치고 있기 때문에 충돌이 될 수 있습니까? 로그에 오류가 표시되지 않아 어떤 일이 일어나는지 알 수 없으며 iOS 개발에 익숙하지 않습니다.

대단히 감사합니다!

편집 1 :은 로그에 오류가 없지만,이 메시지 응용 프로그램 충돌이있을 때 :

Thread 1: EXC_BAD_ACCESS(code = 1, address = 0xd000000c) 

편집 2 : 이것은 내가 컨트롤러를 밀어하고 방법입니다

CustomController *custom = [self.storyboard instantiateViewControllerWithIdentifier:@"Custom"]; 
[self.navigationController pushViewController:custom animated:YES]; 

그리고 다시 버튼을 누를 때 나는 그것을 펑하는 방법이 있습니다 :

[self.navigationController popViewControllerAnimated:YES]; 

편집 3 :

중첩 된 푸시 애니메이션이 손상된 탐색 모음 결과 예상치 못한에서 탐색 전환을 완료 할 수 있습니다 계획에 좀비 오브젝트를 활성화 한 후, 여러 개의 푸시와 팝 후이 메시지를하기 시작 상태. 탐색 바 하위 뷰 트리가 손상 될 수 있습니다.

에 대한 시작/종료 모양 전환의 불균형 호출 실제로 이러한 메시지는 컨트롤러에 애니메이션을 넣는 데 문제가 있다고 말합니까? 모두에게 감사드립니다!

편집 4 :

컨트롤러 A는 다른 장소에 해당 아이콘이 표시됩니다 : 나는 더 설명하기 위해 질문을 수정하려고합니다이 내 설정입니다. 아이콘을 클릭하면 컨트롤러 B를 누르고 위치 A의 세부 정보를 표시 할 수 있습니다.

컨트롤러 B는 위치 A의 위치에 가까운 아이콘을 표시하는 컨트롤러 A를 표시하는 버튼과 함께 위치 A에 대한 정보를 표시합니다. 다시 아이콘을 클릭하고, 위치 B에 대해 말하고, 세부 사항 등을 표시 할 수 있습니다.

사용자가 뒤로 단추를 누르면 이전보기 컨트롤러가 표시됩니다. 이것이 제가 푸시와 팝을 사용한 이유입니다. 이 프로세스를 처리하는 더 좋은 방법이 있습니까? 다시 한 번 감사드립니다!

+0

ARC를 사용합니까? 어떻게 UIViewController를 푸시합니까? 나는 푸시 팝을 사용하고 잘 작동합니다. Tr y 'All Exception Breakpoint'를 켜면 충돌이 발생한 곳을 알려줍니다. – nmh

+0

예. ARC를 사용하고 있습니다. 게시물을 업데이트하여 뷰를 푸시하고 팝하는 방법을 보여주었습니다. 사실, 나는 밀고 팝 할 때 정확한 응답을 얻고 있습니다. 그러나, 내가 지속적인 푸시 및 팝업에 대한 응용 프로그램을 테스트하면 응용 프로그램이 충돌합니다. 당신이 중단 점에 대해 말했던 것을 할 것이고 빨리 갱신 될 것입니다. 대답 해 주셔서 감사합니다! – ryan13

답변

0

내 생각 엔 당신이 애니메이션을 여러보기 컨트롤러를 밀어 것입니다 -이 오류의 근본 원인 일 수 있습니다. 당신은 마지막 푸시 애니메이션을해야 하나 이상의 뷰 컨트롤러를 누르면, 말 :

VC1 *vc1 = [self.storyboard instantiateViewControllerWithIdentifier:@"VC1"]; 
[self.navigationController pushViewController:vc1 animated:NO]; 
VC2 *vc2 = [self.storyboard instantiateViewControllerWithIdentifier:@"VC2"]; 
[self.navigationController pushViewController:vc1 animated:NO]; 
VC3 *vc3 = [self.storyboard instantiateViewControllerWithIdentifier:@"VC3"]; 
[self.navigationController pushViewController:vc1 animated:YES]; 

그러나, 나는 거의 여러 푸시가 필요하다 상황을 상상할 - 난 항상 나쁜 UX에 이르게 생각합니다.

+0

여러 게시물이 발생하는 이유에 대한 설명을 제공하기 위해 게시물을 업데이트했습니다. 실제로 여러 번 수행되는 것은 아니며, 사용자가 버튼을 누르면 발생합니다. 다른 버튼이있는보기가 표시됩니다 다른보기를 밀어 넣을 것입니다.) 이미 애니메이션 제거를 시도했지만 여전히 충돌이 발생합니다. – ryan13

+0

질문과 대답을 확인하십시오 : http://stackoverflow.com/a/14413252/2392973, 당신은 분명히 한 번 이상 (당신은 콘솔 로그가 그것을 말합니다)을 밀어 트리거합니다. 아마 스토리 보드에서 푸시 세그를 연결했을 것입니까? 그런 다음 코드를 푸시합니까? –

+0

사과. 나는 중첩 된 밀어에 관해 게시 한 로그가 내가 경험 한 무작위 충돌과 관련이 없다는 것을 알았습니다. (하지만 링크 덕분에 다른 문제를 해결할 때 도움이 될 것입니다.) 그래서, 원래의 문제에서 충돌이 컨트롤러 스택 때문인지는 잘 모르겠지만 메모리를 확인한 후에 다중 푸시 후, 일반적인 35MB와는 거리가 먼 400-500MB를 촬영합니다. 그것이 문제일까요? 그러나 그렇다면 뷰 컨트롤러를 중첩 할 필요성을 어떻게 해결할 것인가? 고마워요! – ryan13

0

내 제안 : 좀비 객체가 활성화되어 있는지 확인하고 "할당"도구를 사용하여 응용 프로그램에 실제로 메모리 문제가 있는지 확인하십시오. 이 도구에서 제공하는 정보를 사용하여 응용 프로그램의 현재 상황을 파악하고 작업 할 수 있습니다. 도움이 필요하면 알려주세요.

행운을 빈다.

+0

대단히 감사합니다! 당신이 말했던대로하고 여기서 빨리 업데이트 할게요. – ryan13

+0

좀비 개체를 사용하도록 설정 한 후 로그를 포함하도록 게시물을 업데이트했습니다. 나는 그것이 무엇을 의미하는지 잘 모르겠습니다. 시간 내 줘서 고마워! – ryan13

0

푸시 또는 팝시 애니메이션을 해제해야합니다. 나는 이것이 애니메이션이 끝나지 않을 때 충돌을 일으킨다 고 생각한다.

푸시 : self.navigationController pushViewController:custom animated:NO];

팝 : [self.navigationController popViewControllerAnimated:NO];

+0

충돌이 발생하기 전에 로그를 포함하도록 게시물을 업데이트했습니다. 나는 애니메이션을 제거하고 오류를 제거할지 확인하려고 노력할 것입니다. 감사! – ryan13

관련 문제