ios - UIImagePickerController 在其委托(delegate)不是 View Controller 时崩溃

标签 ios uiviewcontroller delegates uiimagepickercontroller

我有一个应用程序,可以从多个 Controller 启动 UIImagePicker...为了正确执行此操作,我有一个类来表示工作流程,该实例是选择器的委托(delegate)。 .. 这样做会使应用程序完全崩溃。当我将委托(delegate)设置为 View Controller 时,就没有问题了......

这是我的代码:

@interface PATWorkflowNewPrescription () <UINavigationControllerDelegate, UIImagePickerControllerDelegate>

@end

@implementation PATWorkflowNewPrescription

- (instancetype) initWithViewController:(UIViewController *) aViewController {
    self = [super init];

    if (self) {
        self.viewController = aViewController;
    }

    return self;
}

+ (void) addNewPrescriptionInViewController:(UIViewController *) aViewController {
    [[[self alloc] initWithViewController:aViewController] run];
}

#pragma mark - Workflow

- (void) run {
    [self choosePhoto:UIImagePickerControllerSourceTypeSavedPhotosAlbum];
}

- (void) choosePhoto:(UIImagePickerControllerSourceType) aSourceType {
    if ([UIImagePickerController isSourceTypeAvailable:aSourceType]) {
        UIImagePickerController *imagePickController = [[UIImagePickerController alloc] init];
        imagePickController.modalPresentationStyle = UIModalPresentationFormSheet;
        imagePickController.sourceType = aSourceType;
        imagePickController.delegate = self; 
        imagePickController.allowsEditing = YES;
        [self.viewController presentViewController:imagePickController animated:YES completion:nil];
    }
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [picker dismissViewControllerAnimated:YES completion:nil];        
}

@end

当我单击按钮时,代码如下:

- (IBAction)onNewPrescription:(id)sender {
    [PATWorkflowNewPrescription addNewPrescriptionInViewController:self];
}

所以,如果有人有想法的话!!!因为我真的不希望 ViewController 成为委托(delegate)。

提前致谢。

顺便说一句,这是一个崩溃报告,它似乎有一些东西可以处理 UINavigationViewController,但是什么?:

Incident Identifier: 9C6A3384-E96F-4F9D-B485-75876AFDC5C9
CrashReporter Key:   c8c2c5d6d8bffd901acbddd82bc34a59f58d75d9
Hardware Model:      iPhone7,1
Process:             XXXXXXX [2129]
Path:                /private/var/mobile/Containers/Bundle/Application/497E6E71-B256-43A2-9A8C-10D41E0A5E9B/XXX.app/XXX
Identifier:          com.XXXXXXX
Version:             3 (0.2)
Code Type:           ARM-64 (Native)
Parent Process:      launchd [1]

Date/Time:           2015-02-16 11:44:13.456 +0100
Launch Time:         2015-02-16 11:44:10.799 +0100
OS Version:          iOS 8.1.3 (12B466)
Report Version:      105

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000010
Triggered by Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x00000001936b7bd0 objc_msgSend + 16
1   UIKit                           0x00000001877cfce0 -[UINavigationController viewDidAppear:] + 308
2   UIKit                           0x0000000187718188 -[UIViewController _setViewAppearState:isAnimating:] + 588
3   UIKit                           0x00000001877186f8 -[UIViewController _endAppearanceTransition:] + 340
4   UIKit                           0x00000001879fc1c0 -[UIPresentationController transitionDidFinish:] + 804
5   UIKit                           0x0000000187df272c -[_UIFullscreenPresentationController transitionDidFinish:] + 80
6   UIKit                           0x00000001879fe8b0 __56-[UIPresentationController runTransitionForCurrentState]_block_invoke_2 + 164
7   UIKit                           0x0000000187822ee0 -[_UIViewControllerTransitionContext completeTransition:] + 128
8   UIKit                           0x000000018782270c -[UITransitionView _didCompleteTransition:] + 1072
9   UIKit                           0x00000001877382ec -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 184
10  UIKit                           0x00000001877381f4 -[UIViewAnimationState animationDidStop:finished:] + 100
11  QuartzCore                      0x000000018705cf60 CA::Layer::run_animation_callbacks(void*) + 292
12  libdispatch.dylib               0x0000000193ce9368 _dispatch_client_callout + 12
13  libdispatch.dylib               0x0000000193ced97c _dispatch_main_queue_callback_4CF + 928
14  CoreFoundation                  0x0000000182f09fa0 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 8
15  CoreFoundation                  0x0000000182f08048 __CFRunLoopRun + 1488
16  CoreFoundation                  0x0000000182e350a0 CFRunLoopRunSpecific + 392
17  GraphicsServices                0x000000018bfcf5a0 GSEventRunModal + 164
18  UIKit                           0x0000000187766aa0 UIApplicationMain + 1484
19  XXXXXXX                         0x0000000100068e64 main (main.m:14)
20  libdyld.dylib                   0x0000000193d12a04 start + 0

Thread 1 name:  Dispatch queue: com.apple.libdispatch-manager
Thread 1:
0   libsystem_kernel.dylib          0x0000000193e10c94 kevent64 + 8
1   libdispatch.dylib               0x0000000193cf897c _dispatch_mgr_invoke + 272
2   libdispatch.dylib               0x0000000193ceb3b0 _dispatch_mgr_thread + 48

Thread 2:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 3:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 4:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 5:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 6 name:  AFNetworking
Thread 6:
0   libsystem_kernel.dylib          0x0000000193e10e7c mach_msg_trap + 8
1   libsystem_kernel.dylib          0x0000000193e10cf4 mach_msg + 68
2   CoreFoundation                  0x0000000182f09ecc __CFRunLoopServiceMachPort + 196
3   CoreFoundation                  0x0000000182f07e20 __CFRunLoopRun + 936
4   CoreFoundation                  0x0000000182e350a0 CFRunLoopRunSpecific + 392
5   Foundation                      0x0000000183d3d7a0 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 312
6   Foundation                      0x0000000183d97e94 -[NSRunLoop(NSRunLoop) run] + 92
7   XXXXXXX                         0x000000010003d984 +[AFURLConnectionOperation networkRequestThreadEntryPoint:] (AFURLConnectionOperation.m:169)
8   Foundation                      0x0000000183e25ba8 __NSThread__main__ + 1068
9   libsystem_pthread.dylib         0x0000000193ec7e7c _pthread_body + 160
10  libsystem_pthread.dylib         0x0000000193ec7dd8 _pthread_start + 156
11  libsystem_pthread.dylib         0x0000000193ec4fac thread_start + 0

Thread 7 name:  com.apple.NSURLConnectionLoader
Thread 7:
0   libsystem_kernel.dylib          0x0000000193e10e7c mach_msg_trap + 8
1   libsystem_kernel.dylib          0x0000000193e10cf4 mach_msg + 68
2   CoreFoundation                  0x0000000182f09ecc __CFRunLoopServiceMachPort + 196
3   CoreFoundation                  0x0000000182f07e20 __CFRunLoopRun + 936
4   CoreFoundation                  0x0000000182e350a0 CFRunLoopRunSpecific + 392
5   CFNetwork                       0x000000018293a4e4 +[NSURLConnection(Loader) _resourceLoadLoop:] + 436
6   Foundation                      0x0000000183e25ba8 __NSThread__main__ + 1068
7   libsystem_pthread.dylib         0x0000000193ec7e7c _pthread_body + 160
8   libsystem_pthread.dylib         0x0000000193ec7dd8 _pthread_start + 156
9   libsystem_pthread.dylib         0x0000000193ec4fac thread_start + 0

Thread 8 name:  com.apple.CFSocket.private
Thread 8:
0   libsystem_kernel.dylib          0x0000000193e2b498 __select + 8
1   CoreFoundation                  0x0000000182f0f8c4 __CFSocketManager + 656
2   libsystem_pthread.dylib         0x0000000193ec7e7c _pthread_body + 160
3   libsystem_pthread.dylib         0x0000000193ec7dd8 _pthread_start + 156
4   libsystem_pthread.dylib         0x0000000193ec4fac thread_start + 0

Thread 9:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 10:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 11:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 12:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 13:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 14:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 15:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 16:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 17:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 18:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 19:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 20:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 21:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 22:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 23:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 24:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 25:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 26:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 27:
0   libsystem_kernel.dylib          0x0000000193e2bc78 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000193ec5390 _pthread_wqthread + 988
2   libsystem_pthread.dylib         0x0000000193ec4fa4 start_wqthread + 0

Thread 28:
0   libsystem_kernel.dylib          0x0000000193e10ed0 semaphore_timedwait_trap + 8
1   libdispatch.dylib               0x0000000193cf69f4 _dispatch_semaphore_wait_slow + 164
2   libdispatch.dylib               0x0000000193cf4ee0 _dispatch_worker_thread + 128
3   libsystem_pthread.dylib         0x0000000193ec7e7c _pthread_body + 160
4   libsystem_pthread.dylib         0x0000000193ec7dd8 _pthread_start + 156
5   libsystem_pthread.dylib         0x0000000193ec4fac thread_start + 0

最佳答案

+ (void) addNewPrescriptionInViewController:(UIViewController *) aViewController {
    [[[self alloc] initWithViewController:aViewController] run];
}

好的,ARC 开启了吗?您的 PATWorkflowNewPrescription 似乎已启动,然后立即发布。 你能展示你的 initWithViewController 方法吗?

关于ios - UIImagePickerController 在其委托(delegate)不是 View Controller 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28542602/

相关文章:

ios - 我需要创建什么类型的证书?

ios - 如何使 View Controller 从左侧显示并且不填充整个 View ?

objective-c - 在 prepareForSegue 中传递对 ViewController 的引用

ios - 如何设置不是InterfaceController的HKWorkoutSessionDelegate

swift - Swift 中的委托(delegate)示例

ios - 在 UIView 周围拖动 UITextField (Swift)

iphone - 动画时UIScrollView setContentOffset?

ios - 如何解析一个有登录名和密码的网页才能进入查看用户的个人页面? (iPhone)

ios - 非标准导航设计

objective-c - Objective C 对象之间如何通信?