代码是:
if ([self.detailitem isKindOfClass:[MovIEInfo class]]) { [self configureVIEwForMovIE];}
我通过了代码,并做了:
po self.detailitem
显示:
(ID) = 0x0ea8f390 <MovIEInfo: 0xea8f390>
那么,我在想什么,为什么在这种情况下if语句返回false?
编辑:
这是Detailitem的设置器:
- (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]; } }
它是一个Master Detail模板的模板代码.
单元测试在setUp中创建一个MovIEInfo:
movIE = [[MovIEInfo alloc] initWithMovIEname:@"MovIE" movIEID:1];
并将其设置在测试中
controller.detailitem = movIE;
另外,我在setDetailitem中添加了一个参数断言:
NSParameterassert([newDetailitem isKindOfClass:[MovIEInfo class]] || [newDetailitem isKindOfClass:[PersonInfo class]] || newDetailitem == nil);
这个断言也是失败的.
我把两个log语句放在断言调用之上:
NSLog(@"%@",[newDetailitem class]);NSLog(@"%@",newDetailitem);
显示:
2012-08-28 08:31:37.574 Popcorn[8006:c07] MovIEInfo2012-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全部内容,希望文章能够帮你解决objective-c – isKindOfClass意外返回NO所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)