UIViewController 하위 뷰를 추가하려고 시도하고 단추를 클릭하여 닫습니다. 현재 코드가 제대로 작동하지 않습니다. 누출인지 문제가 있는지 확실하지 않습니다.하위 뷰에 UIViewController를 추가하고 제거하는 가장 올바른 방법은 무엇입니까?
그래서 먼저 내가 하위 뷰를 추가
newViewController.m에서 다음-(IBAction)openNewView:(id)sender{
// start animation
[UIView beginAnimations:@"CurlUp" context:nil];
[UIView setAnimationDuration:.3];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
// add the view
newViewController* newVC = [[newViewController alloc] initWithNibName:@"newViewController" bundle:[NSBundle mainBundle]];
[self.view addSubview:newVC.view];
[UIView commitAnimations];
}
나는
-(IBAction)closeNewView:(id)sender{
// start animation
[UIView beginAnimations:@"curldown" context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:.3];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view.superview cache:YES];
// close dialog
[self.view removeFromSuperview];
[UIView commitAnimations];
[self.view release];
}
내가 코드를 분석 할 때이 그것을하지만, 작동 말했듯이 제거 할 수있는 기능을 가지고 알려줍니다 :
X에 할당되어 'newViewController'에 저장되는 객체의 누출 가능성 :
대신[self.view release]
의
newViewController* newVC = [[newViewController alloc] initWithNibName:@"newViewController" bundle:[NSBundle mainBundle]];
와 나는의 ViewController를 autorelease
경우 [self.view release];
의 전화를 건 사람에 의해이 시점에서 소유하지 않은 객체의 참조 횟수의
잘못된 감소는 (또한 경우 제거에 충돌 - [FirstViewController performSelector : withObject : withObject :] : 해제 된 인스턴스에 메시지가 전송 됨 0xd21c7e0
012Controlroller에 [newVC release]
을 호출하면빌드가 실패합니다.
바라건대 나는 꽤 분명한 질문을하지는 않지만, viewControllers를 추가하고 제거하는 올바른 방법은 무엇입니까?
이것은 두 번째 앱입니다. 첫 번째 앱은 두 번째 앱이기 때문에 두 번째 앱은 두 번째 앱이므로 새로운 앱입니다. 내가 생각하기에 펜촉 만 사용하지는 않았다. 어쨌든 빌드 셋팅에서 ARC를 켜고, 모든 릴리즈를 지우고, 그것을 해제하고, '[newViewController performSelector : withObject : withObject :] : 메시지를 할당 해제 된 인스턴스 0x6b34c70'으로 보냈습니다. 내가 @ 인터페이스의 newViewController'로 변경하는 경우 : UIView의 {'와 전화'[[NSBundle mainBundle] loadNibNamed : 자기 옵션 : "dateViewController"소유자 @ 전무]'(내 절반 아마 잘못이다)을 즉시 SIGABRT가 Main에 있습니다.m – Kevin
"할당 취소 된 인스턴스로 보낸 메시지"오류는 어디서 나옵니까? 예외 중단 점 (중단 점보기를 표시하려면 Cmd + 6, 왼쪽 하단 모서리에 "+")을 설정하여 이것이 어디에서 왔는지 정확하게 확인하십시오. –
NIB에 "self"라는 해당 속성이없는 콘센트가 있기 때문에 대부분 SIGABRT가 표시됩니다. NIB로 가서 "파일 소유자"자리 표시자를 클릭하고 콘센트보기 (Cmd + Option + 6)로 전환하십시오. 거기에 명명 된 모든 변수는 NIB가로드 될 때 "self"에 해당 속성이 있어야합니다. 뷰 컨트롤러 자체에서 비슷한 속성을 사용하고있을 가능성이 큽니다. –