0

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

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

如果有人可以向我指出这里到底有什么不合适的,我将不胜感激。

4

3 回答 3

1

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

于 2012-06-15T15:58:53.433 回答
0

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

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

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

于 2012-06-15T15:39:51.787 回答
0

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

于 2012-06-15T21:17:23.017 回答