【问题标题】:Using storyboards for developing a static library in iOS在 iOS 中使用 Storyboard 开发静态库
【发布时间】:2016-01-12 06:57:50
【问题描述】:

我是一名新的 iOS 开发人员。我必须开发一个静态库。我有许多视图控制器,它们之间的流程是使用故事板定义的。我从我的项目中创建了两个目标。一个是静态库,另一个是捆绑包。我使用我的捆绑包将我的故事板包含在其中。我已使用此代码从故事板启动我的第一个视图控制器。

-(void)showFromViewController:(UIViewController *)vc{
    NSBundle * bundle = [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"storyBoards" withExtension:@"bundle"]];
    UIStoryboard * libStoryBoard = [UIStoryboard storyboardWithName:@"Main1" bundle:bundle];
    ViewController1 * viewController = [libStoryBoard instantiateViewControllerWithIdentifier:@"ViewController1"];
    [vc presentViewController:viewController animated:YES completion:NULL];
}

vc是调用这个函数的ViewController。

是的,ViewController 具有静态库的目标成员资格。

但是,在另一个项目中包含“.a”和“.bundle”并调用上述函数后,它会在控制台日志中引发错误。

Unknown class ViewController1 in Interface Builder file.

任何人都可以建议使用故事板和静态库的正确方法。如果是,那么您能否指出从情节提要中启动第一个视图控制器的正确方法,该视图控制器的类包含在静态库中。

【问题讨论】:

  • 你确定你得到了正确的捆绑包吗? [NSBundle bundleForClass:[ViewController1 class]]
  • 是的,我想。因为如果我直接将故事板与静态库一起使用并从电子邮件包中引用故事板,它仍然会引发相同的错误。
  • 它不会出现在主包中。

标签: ios objective-c uiviewcontroller storyboard


【解决方案1】:

你可以这样导航

LoginViewController *loginVC=[self.storyboard instantiateViewControllerWithIdentifier:@"loginView"];
[self presentViewController:loginVC animated:YES completion:nil];

【讨论】:

  • 我也做过同样的事情。由于我在不同的项目中使用 .a 和故事板,我必须从包中检索故事板。
  • 我没明白你的意思。
  • NSURL *url = [[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html" subdirectory:@"websiteDir"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [self.webView loadRequest:request];
【解决方案2】:

我有类似的设置。我有我的主项目,我有一个 ModelController 子项目,它有一个静态库和一个资源包,用于我的主项目。

我创建了一个故事板和一个测试视图控制器,并使用您上面的方法进行加载。

唯一可能引起您注意的是静态库 > 目标 > 构建阶段 > 复制标头 > 确保将 ViewController1.h 文件添加到此列表中。

除此之外,一切对我来说都很好。

【讨论】:

  • 你能说明为什么这很重要。因为我尝试这样做仍然得到同样的错误。我想这个错误是因为 ViewController1.m 没有被加载到内存中。
【解决方案3】:

这里的一个可能原因是视图控制器类(在静态库中实现)被链接剥离,因此情节提要加载器在运行时不可用。我遇到了这个问题,当我确保有问题的类是从使用情节提要的代码中引用时,它就消失了。

在我的情况下这很容易,因为我无论如何都需要引用该类(我只是还没有编写该代码),但我验证了 [ViewController class] 足以防止链接器错误地剥离该类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    相关资源
    最近更新 更多