Ale*_*air 0 compiler-errors objective-c nan ios
我从一个声誉良好的教程中提取了这段代码,当我运行应用程序时,我在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
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
- (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);
}
Run Code Online (Sandbox Code Playgroud)
唯一有可能获得NaN的方法是通过计算0 / 0,所以我推断出height和width成员self.mediaItem.image.size可能都是零.也就是说,self.mediaImage.image.size很可能CGSizeZero.
请注意,如果self.mediaItem为nil,或者如果self.mediaItem.image为nil,则self.mediaItem.image.size返回CGSizeZero.我的猜测是其中一个是零.
你可以轻松检查这个.要么设置断点layoutSubviews,要么NSLog在其顶部添加一个断点:
NSLog(@"layoutSubviews: mediaItem=%p image=%p size=%@",
self.mediaItem, self.mediaItem.image,
NSStringFromCGSize(self.mediaItem.image.size));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
771 次 |
| 最近记录: |