ios - 如何确保 iOS 项目中故事板的名称字符串是正确的?
问题描述
在 iOS 项目中:
我总是以这种方式通过 UIStroyboard 创建一个 UIViewController。迅速:
let sb = UIStoryboard(name: "XXXlectViewController", bundle: Bundle.main)
目标-c
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"XXXlectViewController" bundle:[NSBundle mainBundle]];
然后我从情节提要访问 UIViewController。
如果其他人不小心更改了名称字符串。该项目无法按预期工作。
有时,我无法确定我输入的字符串是否正确。
如您所知,如果我使用纯代码创建 UIViewContrller。
let xxxVC = xxxVC()
XXXVC *vc = [[XXXVC alloc] init];
当我命令 B/R 时,我会收到错误警报。这可以帮助我们发现错误。
如何确保 iOS 项目中故事板的名称字符串是正确的?
如何减少这种使用情节提要创建 UIViewControll 实例的方式的危险?
您是否使用 Unit 文本来检查 UIStoryboard 创建的 UIViewController?
我该怎么做?
解决方案
对于 Objective-C,您可以将情节提要名称声明为常量并在代码中使用它们。
在你的.h
文件中
FOUNDATION_EXPORT NSString *const MainStoryboaardIdentifier;
在你的.m
文件中
NSString *const MainStoryboaardIdentifier = @"Main";
对于 swift,最简单的方法是为它们定义一个枚举:
enum StoryboardIdentifier: String {
case Login = "Login"
case Main = "Main"
case Options = "Options"
}
并使用.Main
或.Login
。
这样,自动完成功能也将起作用,并且可以避免输入错误。此外,单元测试也应该更容易。在初始化程序中使用特定标识符UIStoryboard
应该会产生相应的 viewController。
推荐阅读
- html - 位置:固定 div 的剪贴蒙版
- c# - CSC:错误 CS7028:使用来自容器“容器”的公钥对输出进行签名时出错——文件存在。[lgw0hqij.tmp_proj]
- matlab - 多重触发子系统 + 代数环,初始化问题
- firebase - flutter firestore 为不同的页面检索不同的数据
- node.js - 在 Node.js 中使用 Typescript 和 Express 处理错误
- android - Android Kotlin by Delegates.observable 从后台线程进入 ViewModel
- javascript - Await 返回一个对象,但是在获取值时它们是未定义的
- bluetooth - 在微软团队交谈后,蓝牙音频变成了电话式带通过滤器
- c# - 有没有办法在 Visual Studio 中自动格式化所有源代码缩进?
- javascript - OpenLayers 6 - ES6 项目结构