在iOS设备(但不是模拟器)上运行时从CGRectMake获取异常
问题描述:
我发生了一个我无法弄清楚的异常。我在这里有这样的代码:在iOS设备(但不是模拟器)上运行时从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线程
#0 0x35220238 in objc_exception_throw()
#1 0x3751b788 in +[NSException raise:format:arguments:]()
如果有人能指出我究竟是不是在这里,我将非常感激。
答
原来这是我的设备上的iOS版本与我运行的XCode版本之间版本不匹配的问题。更新XCode处理所有事情。
答
我觉得你看到了构建ThumbViewController的视图时的竞态条件,它是在加载nib之后懒散地构建的。我认为当你将新的vc视图添加为子视图时,会发生崩溃,在模拟器上它可能会快速构建为非零。
该SDK不会鼓励多个VC同时负责(只有少数例外,如MPMoviePlayerController)。你真的需要风投的拇指吗?就在名字旁边,他们听起来更像是意见。
如果您必须使用VC,那么您需要将它们的行/列传递给它们,并让它们自己在viewDidLoad(或更高版本)中自行架设。
你可以用常量替换传递给CGRectMake的计算值,看看你是否仍然得到异常?只需确保尝试使用浮点数而不是整数。 –