0

iTunes Connect 有我的应用程序的崩溃报告。它说当我使用UIImagePickerController访问专辑时应用程序会崩溃,但我无法在模拟器或真机上重现该问题。以下是崩溃报告的内容。请帮我查明问题。

Hardware Model:      iPhone4,1
Process:         eyerecolor [5011]
Path:            /var/mobile/Applications/B9D7CEA3-DB1D-4CE3-B605-90EC066B7C92/eyerecolor.app/eyerecolor
Identifier:      eyerecolor
Version:         ??? (???)
Code Type:       ARM (Native)
Parent Process:  launchd [1]


Date/Time:       2012-04-06 18:51:37.692 -0500
OS Version:      iPhone OS 5.0 (9A334)
Report Version:  104


Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread:  0


Last Exception Backtrace:
0   CoreFoundation                 0x371198bf __exceptionPreprocess + 163

1   libobjc.A.dylib                0x324891e5 objc_exception_throw + 33

2   CoreData                       0x3728c64b -[NSPersistentStoreCoordinator setMetadata:forPersistentStore:] + 411

3   PhotoLibraryServices           0x31585ffd +[PLManagedObjectContext(Private) recordVersion:forStore:] + 393

4   PhotoLibraryServices           0x31586385 +[PLManagedObjectContext(Private) configurePersistentStoreCoordinator:] + 897

5   PhotoLibraryServices           0x3158691f __69+[PLManagedObjectContext(Protected) sharedPersistentStoreCoordinator]_block_invoke_0323 + 179

6   libdispatch.dylib              0x32a908cf _dispatch_barrier_sync_f_invoke + 27

7   libdispatch.dylib              0x32a9072f dispatch_barrier_sync_f$VARIANT$mp + 63

8   libdispatch.dylib              0x32a9034f dispatch_sync_f$VARIANT$mp + 19

9   libdispatch.dylib              0x32a909f9 dispatch_sync$VARIANT$mp + 33

10  PhotoLibraryServices           0x3158681f +[PLManagedObjectContext(Protected) sharedPersistentStoreCoordinator] + 155

11  PhotoLibraryServices           0x315853c9 -[PLManagedObjectContext initWithConcurrencyType:useSharedPersistentStoreCoordinator:] + 121

12  PhotoLibraryServices           0x315852a7 +[PLManagedObjectContext contextForPhotoLibrary:] + 115

13  PhotoLibraryServices           0x31584ec9 -[PLPhotoLibrary(Protected) loadDatabase] + 237

14  PhotoLibraryServices           0x3154d87d -[PLPhotoLibrary initWithPath:canTriggerDatabaseUpdate:] + 305

15  PhotoLibraryServices           0x315942a1 __42+[PLSharedPhotoLibrary sharedPhotoLibrary]_block_invoke_0 + 61

16  libdispatch.dylib              0x32a92683 dispatch_once_f$VARIANT$mp + 47

17  PhotoLibraryServices           0x3159425f +[PLSharedPhotoLibrary sharedPhotoLibrary] + 83

18  PhotoLibrary                   0x32c69bc9 -[PLUILibraryViewController _updateFilteredAlbumListWithFilter:] + 157

19  PhotoLibrary                   0x32c6961b -[PLUILibraryViewController init] + 67

20  UIKit                          0x31f58cc5 -[UIImagePickerController _createInitialController] + 317

21  UIKit                          0x31f58d05 -[UIImagePickerController _setupControllersForCurrentSourceType] + 25

22  UIKit                          0x31f58711 -[UIImagePickerController viewWillAppear:] + 69

23  UIKit                          0x31d336b5 -[UIViewController _setViewAppearState:isAnimating:] + 145

24  UIKit                          0x31d8e61b -[UIViewController beginAppearanceTransition:animated:] + 191

25  UIKit                          0x31dd4691 -[UIWindowController transition:fromViewController:toViewController:target:didEndSelector:] + 4077

26  UIKit                          0x31dd314f -[UIViewController presentViewController:withTransition:completion:] + 3123

27  UIKit                          0x044f2e93 -[UIViewControllerAccessibility(SafeCategory) presentViewController:animated:completion:] + 51

28  UIKit                          0x31e2dd97 -[UIViewController presentModalViewController:animated:] + 31

29  eyerecolor                     0x00009c39 -[eyerecolorViewController showImagePicker:] (eyerecolorViewController.m:1855)

- (void)showImagePicker:(UIImagePickerControllerSourceType)sourceType
{
    if ([UIImagePickerController isSourceTypeAvailable:sourceType]) {
        self.m_pickerView.sourceType = sourceType;
        self.m_pickerView.allowsEditing = NO;
        [self presentModalViewController:self.m_pickerView animated:YES];
    }
}

- (void)viewDidLoad
{
    if (self.m_pickerView == nil) {
        self.m_pickerView = [[[UIImagePickerController alloc] init] autorelease];
        self.m_pickerView.delegate = self;
        self.m_pickerView.allowsImageEditing = NO;
    }
}
4

2 回答 2

0

我不确定这是否能解决您的问题,但希望它会有所帮助...

您是否在 iOS 5 上尝试过您的代码?你的设备呢?

查看崩溃报告,您的问题似乎与 iPhone 4S 上的 iOS 5 有关:

Hardware Model: iPhone4,1
...
OS Version: iPhone OS 5.0 (9A334)

尽量不要自动释放你的UIImagePickerController. 有时自动释放的对象会产生问题,而不是平滑内存管理。

编辑:还有一件事......这是Apple建议实现UIImagePickerController的方式:

  1. 验证设备是否能够从所需的来源中挑选内容。执行此操作调用 isSourceTypeAvailable: 类方法,提供来自“UIImagePickerControllerSourceType”枚举的常量。
  2. 通过调用 availableMediaTypesForSourceType: 类方法,检查哪些媒体类型对于您正在使用的源类型可用。这使您可以区分可用于视频录制的相机和仅可用于静止图像的相机。
  3. 通过设置 mediaTypes 属性,告诉图像选择器控制器根据您想要提供的媒体类型(静止图像、电影或两者兼有)调整 UI。
  4. 通过调用当前活动视图控制器的presentViewController:animated:completion:方法呈现用户界面 ,将您配置的图像选择器控制器作为新的视图控制器传递。在 iPad 上,使用弹出框呈现用户界面。仅当图像选择器控制器的 sourceType 属性设置为 UIImagePickerControllerSourceTypeCamera 时,这样做才有效。要使用 popover 控制器,请使用 UIPopoverController 类参考中“Presenting and Dismissing the Popover”中描述的方法。
  5. 当用户点击按钮选择新捕获或保存的图像或电影,或取消操作时,使用您的委托对象关闭图像选择器。对于新捕获的媒体,您的代理可以将其保存到设备上的相机胶卷中。对于以前保存的媒体,您的代理可以根据您的应用程序的目的使用图像数据。

来自UIImagePickerController 类参考

编辑(再次):好吧,如果您的设备没有任何问题,那就太奇怪了,但我再次尝试建议一种改变实际情况的方法。

在 showImagePicker:(UIImagePickerControllerSourceType)sourceType 中实现你的 UIImagePicker 控制器,而不是 viewDidLoad。

使用allowEditing 而不是allowImageEditing(在iOS 3.1 中已弃用)并且不要自动释放您的对象...

于 2012-04-07T18:28:07.873 回答
0

好吧,我想到了几件事。我希望它会工作....

首先检查你是否在你的控制器的 .h 文件中包含 UIImagePickerDelegate 。其次,有像 didFinshPickingImage 这样的委托方法尝试在 Beppe 给你的类参考中搜索。

如果这些东西不起作用,请告诉我您的应用程序是否提供了 Sigbrt 或 Bad Excess ...根据我的经验,我相信这将是一个 sigbrt。如果我没有错,你的应用程序会将你带到 main.m 文件。当然,您将无法分辨出哪里出了问题,因此请在您的应用程序中添加一个例外断点。这将为您提供您的应用程序崩溃的确切时间。

搜索那个点。我真正关心的是你的委托方法不起作用。

如果这是最坏的情况,你仍然找不到解决方案,最后的手段就是这个

让我知道它是否有效:) 干杯

于 2012-04-07T19:05:06.967 回答