2012-05-22 102 views
3

我有當用戶按下一個按鈕,我在酥料餅顯示的UIImagePickerController。此功能在iPad模擬器完全正常,但是當我嘗試做一個實際的測試設備上同樣的事情,我得到的分配/初始化線的NSRangeException我的圖片選擇!的UIImagePickerController崩潰上分配/初始化

imagePicker = [[UIImagePickerController alloc] init];//Crashes here on device 
    imagePicker.delegate = self; 
    imagePicker.allowsEditing = YES; 
    imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 
    imagePicker.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) (kUTTypeImage), nil]; 

這裏是崩潰的消息:

*終止應用程序由於未捕獲的異常 'NSRangeException',原因:「* - [NSOrderedSet initWithOrderedSet:範圍:copyItems:]:範圍{8 ,1}延伸超出界限[0 .. 0]」

我已確定它是通過試圖跨過在調試模式下線路,並跨過該特定行確切的行是什麼原因引起的異常被拋出。

編輯:

我能夠做出再現這個問題100%的基礎工程,這使我相信這是一款iOS的bug,不是我的代碼。

  1. 建立一個新的項目。選擇單視圖應用程序。如果它是故事板或基於xib的
  2. 打開iPad xib/storyboard,向視圖添加roundrectbutton
  3. 將以下IBAction添加到視圖控制器。 pickerPopoverController__strong伊娃

    -(void)iMakeItCrash:(UIButton*)sender 
    { 
        UIImagePickerController* ip = [[UIImagePickerController alloc] init]; 
        ip.delegate = self; 
        ip.allowsEditing = YES; 
        ip.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 
        ip.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) (kUTTypeImage), nil]; 
    
        pickerPopoverController = [[UIPopoverController alloc] initWithContentViewController:ip]; 
        [pickerPopoverController presentPopoverFromRect:sender.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
    } 
    
  4. 胡克這個IBAction爲到該按鈕的觸摸的內心活動。

  5. 工程模擬器上,崩潰在iPad上

EDIT2:如果我嘗試使用presentPopoverFromBarButtonItem:

崩潰仍然發生。然而,不崩潰,如果我不呈現圖像選擇器在所有...

+0

如果imagePicker是一個屬性嘗試self.imagePicker = [[ALLOC的UIImagePickerController] INIT]; –

+0

它不是一個性質,只是伊娃 –

+0

我覺得你剛纔評論imagePicker。allowsEditing = YES; – Spynet

回答

2

我注意到這一點時,我的應用程序在一個空的「保存的照片」上的任何設備我的專輯,或模擬器崩潰。如果已保存的照片中有照片,則不會發生錯誤。這是很容易複製,如果你在模擬器上使用復位數據和設置,並留下您的相冊是空的。

我花了年齡試圖找到一個解決辦法,但我一直沒能來。我認爲提交iOS錯誤報告是一個真正的好主意。

0

我得到了同樣的問題一次,固定波紋管代碼:

-(IBAction)actionOpenPhotoLibrary:(id)sender 
{ 
if (![UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeSavedPhotosAlbum]){ 
    return; 
} 

if ([popover isPopoverVisible]) { 
    [popover dismissPopoverAnimated:YES]; 
    return; 
} 

UIImagePickerController *imagePicker = [[[UIImagePickerController alloc] init]autorelease]; 
imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 
imagePicker.delegate = self; 

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){ 

    popover = [[UIPopoverController alloc] initWithContentViewController:imagePicker];    
    popover.delegate = self; 
    [popover setPopoverContentSize:CGSizeMake(320, 460)]; 
    [popover presentPopoverFromBarButtonItem:[[[UIBarButtonItem alloc]initWithCustomView:(UIButton*)sender] autorelease] permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
} 

imagePicker.navigationBar.tintColor = APP_THEME_COLOR; 
[self presentModalViewController:imagePicker animated:YES]; 
} 

祝您好運。 ....