2012-06-15 3 views
0

У меня есть исключение, которое я просто не могу понять. У меня здесь есть этот код:Получение исключения из CGRectMake при работе на устройстве iOS (но не в симуляторе)

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 на константы, и посмотреть, есть ли у вас все еще исключение? Попробуйте поплавки вместо ints, чтобы быть уверенным. –

ответ

0

Это оказалось проблемой с несоответствием версии между моей версией iOS на моем устройстве и версией XCode, в которой я работал. Обновление XCode позаботилось обо всем.

0

Я думаю, что вы видите состояние гонки при построении представлений ThumbViewController, которые создаются лениво после загрузки ниба. Я думаю, что авария происходит, когда вы добавляете новое представление vc в качестве подзаголовка, которое на симуляторе может быть построено достаточно быстро, чтобы быть не ноль.

SDK не поощряет сразу несколько VCs (за некоторыми исключениями, такими как MPMoviePlayerController). Вам действительно нужны VC для больших пальцев? Просто по имени они больше похожи на виды.

Если вы должны использовать VC, вам необходимо передать им свою строку/столбец и заставить их кадр в viewDidLoad (или позже).

+0

На самом деле, это оказалось несоответствие между моей версией iOS на моем телефоне и моей версией Xcode. Таким образом, это не «реальные» контроллеры представлений в том же смысле, что и страница 1. Это своего рода мини-контроллеры просмотра, если вам потребуется управлять обменом данными и презентацией на его представлении. – Jason

+0

Итак, прочитав этот пост, я рассмотрел общий вариант использования нескольких VC-модулей. Так что да, все, кажется, предлагают не делать этого, поэтому я изменил класс большого пальца, чтобы быть производным от UIView. Спасибо за совет. – Jason

1

CGRectMake - это просто макрос, поэтому это не проблема. Вам действительно нужен только один контроллер вида и он управляет набором представлений, а не имеет набор контроллеров. Наличие нескольких контроллеров сильно обескуражено.

+0

См. Выше :) Это было несоответствие между моей версией iOS на устройстве и моей версией xcode. – Jason

+0

Кроме того, спасибо за подсказку о том, что несколько контроллеров представлений являются плохими. С тех пор я изменил свою реализацию, и мои большие пальцы - теперь все UIViews. – Jason

Смежные вопросы