Ios UIImagePickerController:[PLImageScrollView release]:发送到解除分配实例的消息

Ios UIImagePickerController:[PLImageScrollView release]:发送到解除分配实例的消息,ios,cocos2d-iphone,automatic-ref-counting,uiimagepickercontroller,ios6,Ios,Cocos2d Iphone,Automatic Ref Counting,Uiimagepickercontroller,Ios6,我正在编写一个iOS6应用程序,使用Cocos2D并打开ARC(Cocos作为静态库链接,而不是在ARC下)。我可以使用以下代码演示相机: cameraController = [[UIImagePickerController alloc] init]; // set other properties of camera cameraController.delegate = psImageLayer; psImageLayer.imagePicker = cameraController;

我正在编写一个iOS6应用程序,使用Cocos2D并打开ARC(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]:消息发送到解除分配的实例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
//PhotoShareImageLayer.h(这就是psImageLayer)
@界面光共享图像层:CCLayer
@属性(非原子,保留)UIImagePickerController*imagePicker;
@属性(非原子,保留)UIImage*currentImage;
@结束
有没有办法阻止这种错误的发生?谢谢

编辑:我已经尝试过的事情列表

  • 子类化UIImagePickerController并添加
    -(void)视图将消失:(BOOL)动画{
    [超级视图将消失:动画];
    [自我设置委托:无];
    }
编辑2:imagePickerController:didCancel中未发生崩溃。仅当拍摄照片时,或在相机中按下“重新拍摄”时。“Retake”没有UIImagePickerDelegate方法(只有“Cancel”和“Use”)


编辑3:继续并编写更多应用程序后,此问题似乎不是相机独有的。当拒绝Twitter、Facebook、Contacts等的模式视图时,也会出现相同(或非常类似)的错误

我认为这是苹果内部实现
PLImageScrollView
的一个问题。我正在滑动UIScrollView的setDelegate方法,这会在使用UIImagePicker时导致崩溃(不过,似乎只有在选择照片时才会发生,而不是在取消时)。我最后看到的问题是scrollViewDidScroll:方法被发送到实际的委托(通过我的拦截器),但它已经被释放了


这对我来说意味着PLImageScrollView的委托被解除分配而没有被取消。我通过创建自己的
strong
对真实委托的引用,解决了一半问题。这可能会在其他实现中导致内存泄漏,但至少比崩溃要好。

提示:在没有cocos2d的空白应用程序中尝试,以确保它在原则上正常工作。如果可以的话,在一个空白的cocos2d应用程序中尝试同样的方法。这样你至少知道问题来自哪里。如果两个测试都成功了,那就是你的项目。如果cocos2d测试失败,您就知道是cocos2d把事情搞砸了。@learncos2D谢谢您的提示。我制作了两个空白的应用程序,效果很好,所以我的应用程序一定有问题。@lauren你发现你原来项目中的问题了吗?我目前在代码中遇到相同的问题。ARC在iOS 5.1中正确地释放了UIImagePickerController,在iOS 6中它得到了过度释放。