Столкнувшись с проблемой предупреждения во время отладки

Фон

Я делаю скриншот viewController и представляю его в collectionViewCell. Макет collectionViewCell горизонтальный, но когда я выбираю представление, затем поворачиваю устройство, а затем возвращаюсь к collectionView, макет становится вертикальным.

Для отладки: я поставил точку останова в своем коде, а в области отладки я попытался проверить вывод переменной, и именно здесь начало появляться предупреждение ниже.

**Warning:**

error: property 'modalPresentationStyle' declared with incompatible types in different translation units ('UIModalPresentationStyle' vs. 'UIModalPresentationStyle')
error: instance method 'modalPresentationStyle' has incompatible result types in different translation units ('UIModalPresentationStyle' vs. 'UIModalPresentationStyle')
error: property 'modalPresentationStyle' declared with incompatible types in different translation units ('UIModalPresentationStyle' vs. 'UIModalPresentationStyle')
error: instance method 'modalPresentationStyle' has incompatible result types in different translation units ('UIModalPresentationStyle' vs. 'UIModalPresentationStyle')
error: property 'modalPresentationStyle' declared with incompatible types in different translation units ('UIModalPresentationStyle' vs. 'UIModalPresentationStyle')
error: instance method 'modalPresentationStyle' has incompatible result types in different translation units ('UIModalPresentationStyle' vs. 'UIModalPresentationStyle')
note: declared here with type 'UIModalPresentationStyle'
note: instance method 'modalPresentationStyle' also declared here
note: declared here with type 'UIModalPresentationStyle'
note: declared here with type 'UIModalPresentationStyle'
note: instance method 'modalPresentationStyle' also declared here
note: declared here with type 'UIModalPresentationStyle'
note: declared here with type 'UIModalPresentationStyle'
note: instance method 'modalPresentationStyle' also declared here
note: declared here with type 'UIModalPresentationStyle'
error: 6 errors parsing expression

Я использую :-

  • Версия Xcode: 7.1
  • iOS: 9.1

Примечание. Тот же код, который я запускал в Xcode 6.4 с iOS8, работает без сбоев/предупреждений. Кроме того, мне удалось найти значения переменных в области отладки.

Больше информации :-

Точка останова – я поместил ее в приведенный ниже метод.

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];

    UIViewController *viewController = (UIViewController *)_tabControllers[(NSUInteger)indexPath.row];

    /* Trying to debug above viewController in debug area */
    /* Some code is here also but of no use */

    cell.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    return cell;

}

Команда запущена в области отладки -

po viewController

Ожидаемый результат –

Значение viewController с деталями, такими как кадр, как обычно.

Фактический результат –

Выше упомянутое предупреждение.

Что я пытаюсь отладить —

Макет ячейки collectionView меняется автоматически (один под другим после поворота) в iOS 9, тогда как в iOS 8 макет (горизонтальный вид) был идеальным.

Заранее спасибо.


person nikhil84    schedule 16.11.2015    source источник
comment
Пожалуйста, задайте правильный вопрос, прежде чем он будет закрыт. Обратитесь к справке, чтобы спрашивать, если это необходимо.   -  person sidyll    schedule 16.11.2015
comment
Убедитесь, что вы не определили тип с именем UIModalPresentationStyle нигде в своем коде.   -  person Avi    schedule 16.11.2015
comment
где именно вы получаете эти предупреждения? в отладчике или в редакторе?   -  person Teja Nandamuri    schedule 16.11.2015
comment
@Mr.T в области отладки, пока я использую команду po variable_name, чтобы узнать значение любой конкретной переменной.   -  person nikhil84    schedule 19.11.2015
comment
@Avi Я проверил свой код с помощью UIModalPresentationStyle и нашел self.viewController.modalPresentationStyle = UIModalPresentationFormSheet;   -  person nikhil84    schedule 19.11.2015
comment
какую именно команду вы используете для печати в отладчике?   -  person Teja Nandamuri    schedule 19.11.2015
comment
вам нужно включить больше деталей. Где именно вы поставили точку останова, какую команду вы использовали для печати значений!!   -  person Teja Nandamuri    schedule 19.11.2015
comment
@TommieC. - self.viewController - это другая часть. Поскольку Ави попросил меня найти modalPresentationStyle в моем проекте, я сделал это и предоставил это в своем комментарии. Что касается того, чего я пытаюсь добиться, так это того, что я делаю скриншот viewController и представляю его в collectionViewCell. Макет collectionViewCell горизонтальный, но когда я выбираю представление, затем поворачиваю устройство, а затем возвращаюсь к collectionView, макет становится вертикальным.   -  person nikhil84    schedule 20.11.2015


Ответы (1)


Альтернативные решения

На основании вашего обновленного комментария о желании обрабатывать поворот UICollectionView. Вы пытались добавить следующий метод в свой UIViewController, содержащий представление коллекции?

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];

    [coordinator animateAlongsideTransition:nil completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
        [self.collectionView performBatchUpdates:^{
            [self.collectionView setCollectionViewLayout:self.collectionView.collectionViewLayout animated:YES];
        } completion:nil];
    }];
}

OR

В ваших методах просмотра поворота вы можете вызвать invalidateLayout для UICollectionView.

OR

Вы можете попробовать поместить UIImageView в ячейку представления коллекции и использовать автоматическую компоновку. Затем установите снимок контроллера представления в качестве изображения в UIImageView.

Пример проекта CollectionView от Apple

80+ других вопросов по SO (может дать некоторое представление)

Предупреждения

Что касается предупреждений, которые вы видите. Код, который вы говорите, не важен, вероятно, вызван присвоением недопустимого значения свойству типа UIModalPresentationStyle (более высокая точность затруднена без более значимого кода). Кроме того, код, который вы показываете, имеет небольшую проблему, связанную с использованием каналов (|) в вашей маске автоматического изменения размера. Они могут быть закодированы как [UIViewAutoresizingFlexibleWidth, UIViewAutoresizingFlexibleHeight].

person Tommie C.    schedule 20.11.2015
comment
Привет, я добавил [collectionView.collectionViewLayout invalidateLayout] в метод cellForItemAtIndexPath перед запуском collectionViewCell. Затем я могу получить правильный макет collectionView, но когда я пытаюсь получить рамку ячейки, она показывает портретную рамку (когда я повернулся в альбомную) и наоборот. - person nikhil84; 02.12.2015