gpt4 book ai didi

ios - NaN 错误 iOS(NSUInteger 与 CGFloat)

转载 作者:行者123 更新时间:2023-11-28 18:30:24 24 4
gpt4 key购买 nike

我从一个著名的教程中提取了这段代码,当我运行该应用程序时,我在 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);
}

最佳答案

唯一可能得到 NaN 的方法是计算 0/0,所以我推断 heightwidth 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));

关于ios - NaN 错误 iOS(NSUInteger 与 CGFloat),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32978037/

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