UIImagePickerController 在其委托不是视图控制器时崩溃

UIImagePickerController crashes when its delegate is not the view controller

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

这是我的代码:

@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 成为代表。

提前致谢。

顺便说一句,这是一个崩溃报告,它似乎有一些处理 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 方法吗?