Я считаю, что проблема заключается в следующей строке:
uip = [[[UIImagePickerController alloc] init] autorelease];
Использование autorelease
в этом случае не работает, потому что UIImagePickerController
не сохраняется его представлением, поэтому вам необходимо убедиться, чтоВы сохраняете это сами.Вместо того, чтобы автоматически выпустить его, я бы держал ссылку на него, а затем, после того как вы удалите его из представления, я бы выпустил его.Я изменил ваш код, чтобы показать, что я имею в виду:
-(void) displayCamera
{
uip = [[UIImagePickerController alloc] init]; // Don't autorelease it here
uip.sourceType = UIImagePickerControllerSourceTypeCamera;
uip.showsCameraControls = NO;
uip.toolbarHidden = YES;
uip.navigationBarHidden = YES;
uip.wantsFullScreenLayout = YES;
[[[CCDirector sharedDirector] openGLView] addSubview:uip.view];
UIButton *arrowButton = [UIButton buttonWithType:UIButtonTypeCustom];
[arrowButton addTarget:self
action:@selector(arrowButtonClicked:)
forControlEvents:UIControlEventTouchUpInside];
UIImage *imgNormal = [UIImage imageNamed:@"btn_next_norm.png"];
[arrowButton setImage:imgNormal forState:UIControlStateNormal];
UIImage *imgPressed = [UIImage imageNamed:@"btn_next_pressed.png"];
[arrowButton setImage:imgPressed forState:UIControlStateHighlighted];
arrowButton.frame = CGRectMake(screenSize.width - 48.0, screenSize.height - 37.0, 48.0, 37.0);
[[[CCDirector sharedDirector] openGLView] addSubview:arrowButton];
}
-(void)arrowButtonClicked:(id)sender
{
// close / hide camera
[uip.view removeFromSuperview];
[uip release]; // Release here
uip = nil;
// and then go to another scene
LoadingScene* scene = [LoadingScene sceneWithTargetScene:TargetSceneEndExperienceScene];
[[CCDirector sharedDirector] replaceScene:scene];
}