【问题标题】:iOS show view controller from NSObject not working来自 NSObject 的 iOS 显示视图控制器不起作用
【发布时间】:2014-11-11 22:00:00
【问题描述】:

我正在尝试从 NSObject 子类显示图像选择器视图控制器,但是当我在应用程序的根 vc 上调用 presentViewController 时,应用程序崩溃且没有错误消息。

我的代码在这里:

UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;

UIViewController *root = [[[[UIApplication sharedApplication] windows] objectAtIndex:0] rootViewController];

[root presentViewController:picker animated:YES completion:nil];

如果我在视图控制器中运行它,它就可以正常工作。

编辑:

我无法使用委托,因为我正在为 Unity 构建插件,并且无法通过其他方式获取视图控制器。

我在从 IBAction 调用当前视图控制器中的这段代码时注意到了崩溃:

- (IBAction)showPicker:(id)sender {
    PhotoManager *manager = [[PhotoManager alloc] init];
    [manager loadPhoto];
}

作为对 cme​​ts 的回答,这是课程代码:

PhotoManager.h:

@interface PhotoManager : NSObject <UINavigationControllerDelegate, UIImagePickerControllerDelegate>

- (void)loadPhoto;

@end

.m:

@implementation PhotoManager {
    UIViewController *root;
}

- (void)loadPhoto {
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;

    root = [[[[UIApplication sharedApplication] windows] objectAtIndex:0] rootViewController];

    [root presentViewController:picker animated:YES completion:nil];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [root dismissViewControllerAnimated:YES completion:nil];
    NSLog(@"%@", info);
}

@end

【问题讨论】:

  • 这段代码不相关,它是我们需要看的SubClass,以及如何调用这段代码。祝你好运
  • 还提供堆栈跟踪,显示您在崩溃时遇到的错误
  • Walter 说它在没有错误消息的情况下崩溃

标签: ios objective-c iphone uiimagepickercontroller


【解决方案1】:

正确的方法是创建一个协议/委托并回调呈现视图控制器,告诉它呈现选择器。这使您可以做更多事情,并且是立即学习 IMO 的好习惯。

How do I set up a simple delegate to communicate between two view controllers?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 2021-08-09
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多