2014-09-11 12 views
0

NSZombie는 내 앱에서 개체가 하나 이상 출시되어 해당 단추를 누를 때마다 응용 프로그램이 중단되는 것을 감지했습니다. 그러나 과도한 릴리스가 발생한 곳의 소스 코드를 살펴본 후 릴리스를 유발할 수있는 코드가 있는지 확인할 수 없었습니다. xcode는 실제 코드없이 객체를 자동으로 해제 할 수 있습니까? 이 문제를 해결하는 방법에 대한해제 된 개체를 해결하는 방법

-(void) takePicture:(CDVInvokedUrlCommand *)command { 
    CDVCameraPicker* cameraPicker = [[CDVCameraPicker alloc] init]; 
    self.pickerController = cameraPicker; 
    CameraOverlayViewController* overlay = [[CameraOverlayViewController alloc] initWithNibName:@"CameraOverlayViewController" bundle:nil]; 
    cameraPicker.sourceType = UIImagePickerControllerSourceTypeCamera; 
    cameraPicker.cameraOverlayView = overlay.view; 

    [self.viewController presentViewController:cameraPicker animated:YES completion:nil]; 
} 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
    } 
    return self; 
} 

어떤 아이디어 :

다음은 릴리스 이벤트를이 악기에 의해보고 된 곳은? 미리 감사드립니다!

+0

코드에 명시 적으로 다른 것을 릴리스하고 있습니까? – mostruash

+1

ARC 또는 MRC를 사용하고 있습니까? – rmaddy

+0

@mostruash 아니요.이 이벤트는 NSZombie에서 릴리스 이벤트가보고 된 유일한 장소입니다. 사실 그것은 문제를 일으키는 CameraOverlayViewController라는 것을 알고 있지만, 어디서 공개 됐는지 찾을 수는 없습니다. – forseqn

답변

0

나는 CameraOverlayViewController가 출시되었다고 생각합니다.

는 아래의 코드

CameraOverlayViewController* overlay; 
    -(void) takePicture:(CDVInvokedUrlCommand *)command { 
    CDVCameraPicker* cameraPicker = [[CDVCameraPicker alloc] init]; 
    self.pickerController = cameraPicker; 
    overlay = [[CameraOverlayViewController alloc] initWithNibName:@"CameraOverlayViewController" bundle:nil]; 
    cameraPicker.sourceType = UIImagePickerControllerSourceTypeCamera; 
    cameraPicker.cameraOverlayView = overlay.view; 

    [self.viewController presentViewController:cameraPicker animated:YES completion:nil]; 
} 
+0

그게 전부 야! – forseqn

+1

변경 사항을 명확히해야합니다. 오버레이 뷰 컨트롤러에 ivar을 사용해야한다는 것을 의미합니다. – rmaddy

0

당신은 CameraOverlayViewController를 작성하고 뷰의에 대한 참조를 유지하고 시도하지만, takePicture 때 CameraOverlayViewController 자체가 범위를 벗어난 것입니다 : 방법은 종료된다. 보기가 View Controller를 보유하지 않습니다. CameraOverlayViewController에 대한 참조를 유지하거나 뷰 객체 자체에만 관심이있는 경우 xib 파일에서 뷰를 만들고 해당 뷰로 cameraPicker.cameraOverlayView를 설정하면됩니다.

편집 : 카메라로 완료되면

-(void) takePicture:(CDVInvokedUrlCommand *)command { 
    CDVCameraPicker* cameraPicker = [[CDVCameraPicker alloc] init]; 
    self.pickerController = cameraPicker; 

    self.overlay = [[CameraOverlayViewController alloc] initWithNibName:@"CameraOverlayViewController" bundle:nil]; 
    cameraPicker.sourceType = UIImagePickerControllerSourceTypeCamera; 
    cameraPicker.cameraOverlayView = self.overlay.view; 

    [self.viewController presentViewController:cameraPicker animated:YES completion:nil]; 
} 

:

@property (strong) CameraOverlayViewController *overlay; 

및 방법 :

는 예를 들어, 헤더 파일에 부동산을 만들 수 , 당신은 참조를 놓아주고 싶을 것이다. 예를 들면 다음과 같습니다.

-(void) cameraPickerFinished { 
    self.overlay = nil; 
} 
+0

CameraOverlayViewController에 대한 참조를 유지한다는 것은 무엇을 의미합니까? 몇 가지 코드를 내려 주실 수 있습니까? – forseqn

+0

편집했습니다. 희망은 분명합니다. – Mike

+0

하지만이 버튼을 누르면 아래 오류 메시지가 표시됩니다. \ [CameraOverlayViewController select : forEvent :] : 인식 할 수없는 선택기가 인스턴스로 전송 됨 \ select 메서드가 alrdy 출시 컨트롤러를 사용하려고합니다. ? – forseqn