gpt4 book ai didi

iphone - 测试 IBOutlets 自动连接或在未连接的 socket 上构建失败

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:14:46 24 4
gpt4 key购买 nike

有没有人想出一种方法来自动单元测试 UIViewController 子类上定义为 IBOutlets 的所有属性在加载 View 后连接(通过调用 loadView)?

我的理解是 IBOutlet 是经过预处理的,因此您无法在运行时确定哪些属性是 IBOutlet

或者,如果您定义了未连接的 IBOutlets,是否还有另一种方法可以强制构建失败?可能是 LLVM 编译器警告选项?

最佳答案

您可以使用断言,它会让您快速失败(引起您的注意)。

- (void)viewDidLoad
{
[super viewDidLoad];

NSAssert(self.myLabel, @"IBOutlet not set for self.myLabel");
}

您可能可以将其包装在一个宏中以节省一些输入 - 也许是这样的

#define PASOutletAssert(outlet) NSAssert(outlet, @"IBOutlet not set for " @#outlet)

- (void)viewDidLoad
{
[super viewDidLoad];

PASOutletAssert(self.myLabel);
PASOutletAssert(self.myOtherLabel);
}

另一种节省输入的变体可能如下所示 -

#define PASOutletsAssert(self, ...) _PASOutletsAssert(self, @"" # __VA_ARGS__)

void _PASOutletsAssert(id self, NSString *commaSeperatedKeyPaths)
{
NSArray *keyPaths = [commaSeperatedKeyPaths componentsSeparatedByString:@", "];

for (NSString *keyPath in keyPaths) {
NSCAssert1([self valueForKeyPath:keyPath], @"IBOutlet not set for keypath - \"%@\"", keyPath);
}
}

- (void)viewDidLoad
{
[super viewDidLoad];

PASOutletsAssert(self, myLabel, otherLabel, yellowSquare);
}

关于iphone - 测试 IBOutlets 自动连接或在未连接的 socket 上构建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15785217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com