【发布时间】:2015-10-06 19:24:02
【问题描述】:
我从一个有信誉的教程中提取了这段代码,当我运行应用程序时,我在 CGFloat 实例 *imageHeight 上得到一个 NaN 错误。但是,如果我将类型更改为 NSUInteger,则应用程序构建得很好。有没有人可以解释发生了什么。我理解 NaN = Not A Number,但 CGFloat 作为数据类型应该可以正常工作。
崩溃
CGFloat imageHeight = self.mediaItem.image.size.height / self.mediaItem.image.size.width * CGRectGetWidth(self.contentView.bounds);
self.mediaImageView.frame = CGRectMake(0, 0, CGRectGetWidth(self.contentView.bounds), imageHeight);<--NaN ERROR is thrown here
不会崩溃
NSUInteger imageHeight = self.mediaItem.image.size.height / self.mediaItem.image.size.width * CGRectGetWidth(self.contentView.bounds);
self.mediaImageView.frame = CGRectMake(0, 0, CGRectGetWidth(self.contentView.bounds), imageHeight);
完整的方法体
- (void) layoutSubviews {
[super layoutSubviews];
NSUInteger imageHeight = self.mediaItem.image.size.height / self.mediaItem.image.size.width * CGRectGetWidth(self.contentView.bounds);
self.mediaImageView.frame = CGRectMake(0, 0, CGRectGetWidth(self.contentView.bounds), imageHeight);
CGSize sizeOfUsernameAndCaptionLabel = [self sizeOfString:self.usernameAndCaptionLabel.attributedText];
self.usernameAndCaptionLabel.frame = CGRectMake(0, CGRectGetMaxY(self.mediaImageView.frame), CGRectGetWidth(self.contentView.bounds), sizeOfUsernameAndCaptionLabel.height);
CGSize sizeOfCommentLabel = [self sizeOfString:self.commentLabel.attributedText];
self.commentLabel.frame = CGRectMake(0, CGRectGetMaxY(self.usernameAndCaptionLabel.frame), CGRectGetWidth(self.bounds), sizeOfCommentLabel.height);
// Hide the line between cells
self.separatorInset = UIEdgeInsetsMake(0, CGRectGetWidth(self.bounds)/2.0, 0, CGRectGetWidth(self.bounds)/2.0);
}
【问题讨论】:
-
您可以发布
self.mediaItem.image.size.height、self.mediaItem.image.size.width和CGRectGetWidth(self.contentView.bounds)的值吗? :) -
@sloik 值会根据传入的图像大小而变化。每个单元格的每个 contentView 可能不同,也可能不同。换句话说,我真的不知道。
-
我用完整的方法主体和定义更新了问题。
-
为什么 CGFloat 能够处理 NaN?
-
但是你遇到了崩溃,对吧?那么当你发生崩溃时的价值是什么? :)
标签: ios objective-c compiler-errors nan