gpt4 book ai didi

objective-c - isKindOfClass 意外返回 NO

转载 作者:太空狗 更新时间:2023-10-30 03:14:59 25 4
gpt4 key购买 nike

我的一个单元测试失败了,原因出乎我的意料。似乎对 isKindOfClass 的调用返回了 NO,但是当我调试并单步执行时,似乎没有理由返回 NO。

代码是:

if ([self.detailItem isKindOfClass:[MovieInfo class]]) {
[self configureViewForMovie];
}

我单步执行了代码并做了:

po self.detailItem

显示:

(id) $1 = 0x0ea8f390 <MovieInfo: 0xea8f390>

那么,我错过了什么,为什么 if 语句在这种情况下会返回 false?

编辑:

这是 DetailItem 的 setter :

- (void)setDetailItem:(id)newDetailItem
{
if (_detailItem != newDetailItem) {
NSLog(@"%@", [newDetailItem class]);
_detailItem = newDetailItem;

// Update the view.
[self configureView];
}

if (self.masterPopoverController != nil) {
[self.masterPopoverController dismissPopoverAnimated:YES];
}
}

它是主从模板的模板代码。

单元测试在 setUp 中创建 MovieInfo:

movie = [[MovieInfo alloc] initWithMovieName:@"Movie" movieID:1];

并在测试中设置

controller.detailItem = movie;

另外,我在setDetailItem中添加了一个参数断言:

NSParameterAssert([newDetailItem isKindOfClass:[MovieInfo class]] || [newDetailItem isKindOfClass:[PersonInfo class]] || newDetailItem == nil);

这个断言也是失败的。

我在断言调用上方放置了两个日志语句:

NSLog(@"%@", [newDetailItem class]);
NSLog(@"%@", newDetailItem);

显示:

2012-08-28 08:31:37.574 Popcorn[8006:c07] MovieInfo
2012-08-28 08:31:38.253 Popcorn[8006:c07] <MovieInfo: 0x6daac50>

再编辑一下:

我在单元测试中设置它之前添加了 isKindOfClass 检查,那个检查通过了。

if ([movie isKindOfClass:[MovieInfo class]]) {
NSLog(@"Yep"); //This passes and prints out
}
controller.detailItem = movie; //calls into the setter and fails.

最佳答案

这是因为被测类“DetailViewController”不在测试目标中。我本以为这会以不同的方式表现出来(链接器错误或其他),但显然,它只会导致奇怪的行为。将 DetailViewController 添加到测试目标修复了问题。

关于objective-c - isKindOfClass 意外返回 NO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12159961/

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