2012-06-15 48 views
0

我發生了一個我無法弄清楚的異常。我在這裏有這樣的代碼:在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:]() 

如果有人能指出我究竟是不是在這裏,我將非常感激。

+0

你可以用常量替換傳遞給CGRectMake的計算值,看看你是否仍然得到異常?只需確保嘗試使用浮點數而不是整數。 –

回答

0

原來這是我的設備上的iOS版本與我運行的XCode版本之間版本不匹配的問題。更新XCode處理所有事情。

0

我覺得你看到了構建ThumbViewController的視圖時的競態條件,它是在加載nib之後懶散地構建的。我認爲當你將新的vc視圖添加爲子視圖時,會發生崩潰,在模擬器上它可能會快速構建爲非零。

該SDK不會鼓勵多個VC同時負責(只有少數例外,如MPMoviePlayerController)。你真的需要風投的拇指嗎?就在名字旁邊,他們聽起來更像是意見。

如果您必須使用VC,那麼您需要將它們的行/列傳遞給它們,並讓它們自己在viewDidLoad(或更高版本)中自行架設。

+0

事實上,原來我手機上的iOS版本與我的Xcode版本之間不匹配。所以,這些並不是像頁面一樣的「真實」視圖控制器。如果您需要管理數據交換和其視圖上的呈現,這些都是一種小型視圖控制器。 – Jason

+0

因此,閱讀這篇文章後,我研究了嵌入多個VC的一般用例。所以是的,每個人似乎都建議不要這樣做,所以我已經將拇指類改爲從UIView派生而來。謝謝你的提示。 – Jason

1

CGRectMake只是一個宏,所以它不是問題。你真的只需要一個視圖控制器,並讓它管理一組視圖,而不是擁有一組控制器。擁有多個控制器是非常不鼓勵的。

+0

請參閱上面:)這是我的設備上的iOS版本和我的xcode版本之間的不匹配。 – Jason

+0

另外,感謝關​​於多個視圖控制器的提示是一件壞事。我已經改變了我的實現,我的拇指現在都是UIViews。 – Jason

相關問題