Arhn - архитектура программирования

Почему добавление представления приводит к сбою программы?

Пытаясь понять, как интегрировать код из одной программы в другую, я выгрузил 3 класса в пустой открытый игровой проект GLES. Это классы ContentController, PhoneContentController и MyViewController из примера яблока PageControl.

Затем я взял этот код инициализации из файла делегата приложения PageControl и поместил его в игровой проект appDelegate.

 contentController = [[PhoneContentController alloc] init];
 [self.window addSubview:contentController.view];

с необходимыми synthetic/protocols/includes и объявлениями там, где они находятся в PageControl.

Я получаю ошибку SIGABRT в этой строке в main:

return UIApplicationMain(argc, argv, nil, NSStringFromClass([IntegrationTestAppDelegate class]));

Я добавил общую точку останова, и она указывает на эту строку в MyViewController.m.

newsItem = [[UITextView alloc] initWithFrame:self.view.frame];

Я предполагаю, что это как-то связано с self.view.frame ....? может быть? Итак, есть ли здесь какая-то проблема с типом иерархии?

РЕДАКТИРОВАТЬ - при дальнейшем осмотре кажется, что это как-то связано с представлениями... хотя я не совсем знаю, что. Может ли это иметь какое-то отношение к чужому файлу nib?

РЕДАКТИРОВАТЬ - более подробно: newsItem вызывается из инициализации myViewController, который вызывается из метода внутри контроллера содержимого телефона, который, в свою очередь, вызывается следующей строкой в ​​appdelegate:

contentController = [[PhoneContentController alloc] init];
23.01.2012

  • можете ли вы добавить около 5 строк кода. Где вы устанавливаете newsItem = [UIText View.. так что добавьте весь код, где вы это делаете.. 23.01.2012
  • в каком контроллере вы это делаете, это основной вид. Вместо этого у вас есть окно за вашим видом, а не какой-либо вид. Если у вас есть какой-то контроллер представления, попробуйте использовать - [self.view addSubview:contentController.view]; 23.01.2012

Ответы:


1

В какой момент:

newsItem = [[UITextView alloc] initWithFrame:self.view.frame];

запущен? В частности, после завершения загрузки пера? Если нет, и self.view был установлен в Interface Builder, тогда self.view будет нулевым, а self.view.frame будет мусором. (-initWithFrame: ожидает структуру CGRect, поэтому в этом случае нулевой указатель совершенно неприемлем, в отличие от методов, которые ожидают объекты Objective-C.)

23.01.2012
  • как узнать, где выполняется загрузка пера и когда она завершена? Это как-то связано с файлом plist... верно? но где это называется в коде? 24.01.2012
  • Код, который требует настройки всех представлений (включая загрузку из пера, если это применимо), должен идти в viewDidLoad (см. документацию UIViewController). Судя по вашему редактированию, вы инициализировали newsItem в -init... попробуйте перейти к viewDidLoad вместе с любым другим кодом, зависящим от [self view]. 24.01.2012
  • Теперь я изменил это и получаю ту же ошибку в следующей строке PhoneContentController: if (controller.view.superview == nil) 24.01.2012
  • (который находится в конце метода LoadScrollViewWithPage этого класса, вызываемого в конце его метода инициализации 24.01.2012
  • Я не вижу объект контроллера в вашем вопросе, и у вас есть несколько объектов/классов, содержащих контроллер. Не могли бы вы опубликовать полный блок кода? Мне очень трудно разглядеть реальную последовательность того, что происходит. 24.01.2012
  • Подождите, я думаю, что сузил проблему, я вызываю initWithNibName, и когда этот код был скопирован, он не был обновлен. Однако меня озадачивает то, что я удалил перо из исходного проекта, и оно все еще работает. Нет пера под названием MyView. почему это все еще работает? 25.01.2012
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..