ios - 尝试从 Storyboard初始化 View Controller

标签 ios objective-c

我在主 Storyboard中放置了一个 View Controller ,但是当我尝试初始化和加载 View Controller 时,我的应用程序崩溃了。我使用的 xcode 版本并没有真正告诉我正确得到的错误,但我确实看到它给了我一个 sigabrt 信号。我不知道为什么它不起作用。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SelectDateViewController"];
    [vc setModalPresentationStyle:UIModalPresentationFullScreen];

    [self presentModalViewController:vc animated:YES];

我是这样调用它的。我使用的所有名称都是正确的,但我仍然不明白为什么会崩溃。

最佳答案

在最后一行设置断点以验证 vc(以及 Storyboard)是否为零。

如果 viewController 参数为 nil,presentModalViewController 将崩溃。

如果两者都为零,那么您的 Storyboard名称可能不正确(不太可能)。

如果只有 vc 为 nil,则标识符不正确(在代码或 Storyboard 中)。确保 VC 的 Storyboard ID(如屏幕截图中圈出的那样)与您的描述相符。通常不为此选择类名(因为您的 Storyboard 中可能有多个给定类的实例)。

Storyboard ID 区分大小写并且必须是唯一的。我发现设置它的可靠方法是在选择 View Controller 并按返回结束编辑后在该字段中键入名称(不要只是单击该字段)。我注意到在从 Xcode 4 转换到 5 时 Storyboard中发生了一些损坏,反之亦然,因此深入研究 plist/xml 可能也会有所帮助。

Storyboard ID

编辑: 调用它的时间也很重要,请参见 presentModalViewController not working . 确保接收消息的 View Controller 已经显示(即在 viewDidAppear 中调用,而不是 viewDidLoad)。

正如 Abdullah 所提到的,您可能应该将已弃用的方法移至:

[self presentViewController:vc animated:YES completion:nil];

在这种情况下,完成 block 可以是 nil 没有问题,但 vc 不能是。

关于ios - 尝试从 Storyboard初始化 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19017396/

相关文章:

objective-c - 可以从带有对象的 NSSet 中检索带有变量的 NSSet 吗?

ios - 错误 :Unknown type name BOOL for c function in Xcode

iphone - iOS 中带有图片的 XML Gridview

ios - 倒数计时器不会在00:00:00:00:00停止

iOS 5.1 与 Xcode 4.2 和视网膜在 iPad 3

iphone - 如何显示电子邮件已发送通知 ipad

iphone - iOS 上的多页应用程序

ios - 如何使 Swift 中的类扩展具体类并符合多种协议(protocol)?

ios - NSObject 发布了,NSString,NSArray 没有?

ios - 如何将弱引用对象存储在数组中,objc中的字典?