在iOS设备上运行时从CGRectMake获取异常(但不是模拟器)

时间:2012-06-15 15:29:46

标签: iphone ios nsexception cgrectmake

我发生异常,我无法弄明白。我在这里有一些代码:

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:] ()

如果有人可以向我指出究竟什么不对,我会非常感激。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

SDK不会立即鼓励多个VC负责(只有少数例外情况,如MPMoviePlayerController)。你真的需要VC用于拇指吗?只是名字,它们听起来更像是观点。

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

答案 2 :(得分:0)

我的设备上的iOS版本与运行的XCode版本之间存在版本不匹配的问题。更新XCode会处理所有事情。