我正在使用Cocos2D和ARC開啓(Cocos鏈接爲靜態庫,而不是ARC)來編寫iOS6應用程序。我可以使用下面的代碼來呈現相機:UIImagePickerController:[PLImageScrollView發佈]:發送到已釋放實例的消息
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類,因爲我沒有寫它。
我的問題似乎與發佈的問題here非常相似,但他的解決方案涉及修改擁有該委託的類。在這種情況下,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方法(僅「取消」和「使用」)。
編輯3:繼續和寫入更多的應用程序後,似乎這個問題不是唯一的相機。解除Twitter,Facebook,聯繫人等模式視圖時會出現相同(或非常相似)的錯誤。
提示:嘗試在一個空白的應用程序,並沒有cocos2d,以確保它的原則工作。如果可行,請在空白的cocos2d應用程序中嘗試。這樣你至少知道問題來自哪裏。如果兩個測試都成功了,那麼這是關於您的項目的。如果cocos2d測試失敗,你知道這是cocos2d搞砸了。 – LearnCocos2D
@ LearnCocos2D感謝您的提示。我做了兩個空白的應用程序,它運行良好,所以我的應用程序一定有問題。 – lauren
@lauren你發現你的原始項目有什麼問題嗎?我目前在我的代碼中遇到同樣的問題。 ARC在iOS 5.1中正確釋放UIImagePickerController,它在iOS6中發佈。 –