我正在编写一个使用 Cocos2D 并打开 ARC 的 iOS6 应用程序(Cocos 作为静态库链接,而不是在 ARC 下)。我可以使用以下代码展示相机:
cameraController = [[UIImagePickerController alloc] init];
// set other properties of camera
cameraController.delegate = psImageLayer;
psImageLayer.imagePicker = cameraController;
[[CCDirector sharedDirector] presentViewController:cameraController animated:YES completion:nil];
psImageLayer
我用这段代码关闭了相机:
- (void) imagePickerController: (UIImagePickerController *) picker
didFinishPickingMediaWithInfo: (NSDictionary *) info {
// do something with image
[[CCDirector sharedDirector] dismissViewControllerAnimated:YES completion:nil];
}
当我关闭相机时,应用程序崩溃并出现以下错误:*** -[PLImageScrollView release]: message sent to deallocated instance 0x2494f4f0
我很确定这PLImageScrollView
是一个 iOS 类,因为我没有编写它。
我的问题似乎与此处发布的问题非常相似,但他的解决方案涉及修改拥有委托的类。在这种情况下, UIImagePickerController 是类,不能修改。
PhotoShareImageLayer 头文件的相关部分贴在下面:
// PhotoShareImageLayer.h (this is what psImageLayer is)
@interface PhotoShareImageLayer : CCLayer <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
@property(nonatomic, retain) UIImagePickerController *imagePicker;
@property(nonatomic, retain) UIImage *currentImage;
@end
关于如何阻止此错误发生的任何想法?谢谢。
编辑:我已经尝试过的事情清单。
- 子类化 UIImagePickerController 并添加
- (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [self setDelegate:nil]; }
编辑 2:崩溃不会发生在imagePickerController:didCancel
. 仅在拍照时,或在相机中按下“重拍”时。“Retake”没有 UIImagePickerDelegate 方法(只有“Cancel”和“Use”)。
编辑 3:在继续编写更多应用程序后,看来这个问题并不是相机独有的。关闭 Twitter、Facebook、联系人等的模式视图时会发生相同(或非常相似)的错误。