0

我正在使用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,聯繫人等模式視圖時會出現相同(或非常相似)的錯誤。

+0

提示:嘗試在一個空白的應用程序,並沒有cocos2d,以確保它的原則工作。如果可行,請在空白的cocos2d應用程序中嘗試。這樣你至少知道問題來自哪裏。如果兩個測試都成功了,那麼這是關於您的項目的。如果cocos2d測試失敗,你知道這是cocos2d搞砸了。 – LearnCocos2D

+0

@ LearnCocos2D感謝您的提示。我做了兩個空白的應用程序,它運行良好,所以我的應用程序一定有問題。 – lauren

+0

@lauren你發現你的原始項目有什麼問題嗎?我目前在我的代碼中遇到同樣的問題。 ARC在iOS 5.1中正確釋放UIImagePickerController,它在iOS6中發佈。 –

回答

0

我認爲這是蘋果內部執行PLImageScrollView的問題。我正在調整UIScrollView的setDelegate方法,這會在使用UIImagePicker時導致崩潰(儘管它似乎只是選擇了一張照片,而不是如果您取消)。我最終看到的問題是scrollViewDidScroll:方法被髮送到真正的委託(通過我的攔截器),但它已經被釋放。

這向我建議PLImageScrollView的委託正在處理,而沒有被淘汰。我通過創建我自己的strong引用到真正的代表來半解決了這個問題。這可能會導致其他實現中的內存泄漏,但這至少比崩潰更好。

相關問題