【问题标题】:Getting an exception from CGRectMake when running on iOS device (but not simulator)在 iOS 设备(但不是模拟器)上运行时从 CGRectMake 获取异常
【发布时间】:2012-06-15 15:29:45
【问题描述】:

我发生了一个我无法弄清楚的异常。我这里有这段代码:

newControllers = [[NSMutableArray alloc] initWithCapacity:9];  // Only allocate what we need


    // Ok, add the new thumb UIs
    for (int i = 0; i < 3; ++i) {

        for (int j = 0; j < 3; ++j) {

            // Create the view controller
            ThumbViewController *newThumbVC = [[ThumbViewController alloc]
                                                   initWithNibName:@"NewThumbDisplayView" bundle:nil];
            // Set the info
            newThumbVC.localInfo = [newInfo objectAtIndex:(i * 3) + j];

            // Place it properly
            [self.scrollViewContent addSubview:newThumbVC.view];
            CGRect rect = CGRectMake(8 + (j * 99), 363 + (i * 134), 106, 142);
            newThumbVC.view.frame = rect;
            [self.scrollViewContent bringSubviewToFront:newThumbVC.view];

            [newControllers addObject:newThumbVC];
        }
    }

在模拟器上运行时,效果非常好。今天早上我尝试在手机上运行它,但在使用以下堆栈调用 CGRectMake 时出现异常(请注意,输出窗口中根本没有打印任何内容,这让我很难弄清楚)。

线程 1,队列:com.apple.main-thread

    #0  0x35220238 in objc_exception_throw ()
    #1  0x3751b788 in +[NSException raise:format:arguments:] ()

如果有人能指出这里到底哪里不对,我将不胜感激。

【问题讨论】:

  • 你能用常量替换传递给 CGRectMake 的计算值,看看你是否仍然得到异常?为了确定,请尝试使用浮点数而不是整数。

标签: iphone ios nsexception cgrectmake


【解决方案1】:

CGRectMake 只是一个宏,所以这不是问题。你真的只需要一个视图控制器并让它管理一组视图而不是一组控制器。强烈建议不要使用多个控制器。

【讨论】:

  • 见上文 :) 我在设备上的 iOS 版本和我的 xcode 版本不匹配。
  • 另外,感谢关​​于多视图控制器是一件坏事的提示。从那以后我改变了我的实现,我的拇指现在都是 UIViews。
【解决方案2】:

结果证明,我的设备上的 iOS 版本与我正在运行的 XCode 版本之间存在版本不匹配的问题。更新 XCode 解决了所有问题。

【讨论】:

    【解决方案3】:

    我认为您在构建 ThumbViewController 的视图时看到了竞争条件,这些视图是在加载 nib 后懒惰地构建的。我认为当您将新 vc 的视图添加为子视图时会发生崩溃,这在模拟器上可能会很快构建到非零。

    SDK 不鼓励同时由多个 VC 负责(只有少数例外,例如 MPMoviePlayerController)。你真的需要风投吗?就名字而言,它们听起来更像是视图。

    如果您必须使用 VC,那么您需要将它们的行/列传递给它们,并让它们在 viewDidLoad(或更高版本)中自行构建。

    【讨论】:

    • 其实是我手机上的iOS版本和我的Xcode版本不匹配。因此,这些不是与第一页相同意义上的“真实”视图控制器。如果您需要在其视图上管理数据交换和呈现,这些是一种迷你视图控制器。
    • 所以在阅读了这篇文章后,我研究了嵌入多个 VC 的一般用例。所以,是的,每个人似乎都建议不要这样做,所以我将 thumb 类改为从 UIView 派生。感谢您的提示。
    猜你喜欢
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 2014-12-24
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    相关资源
    最近更新 更多