Соединение делегата меняет имя сцены раскадровки [дубликат]

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
12
задан Ted 9 October 2015 в 14:08
поделиться

6 ответов

Попробуйте переименовать контроллер так, как вы хотите:

Шаг 1 Выберите «ваш контроллер» с именем «Делегат» на скриншоте.

Шаг 2 Еще раз нажмите «Делегировать» или нажмите [Enter], чтобы перейти в режим переименования.

Шаг 3 Переименуйте его в нечто значимое.

Шаг 4 Отмените выбор или нажмите [Enter] еще раз, чтобы сохранить изменения. Имя сцены будет обновлено в соответствии с указанным вами именем.

12
ответ дан Steve Wilford 19 August 2018 в 17:22
поделиться
  • 1
    Спасибо, я не знаю, почему я об этом не думал. Но я все равно хотел бы выяснить, в чем проблема в файле раскадровки. – Morten Holmgaard 9 October 2015 в 09:59
  • 2
    Это не всегда работает - имя изменено обратно после переименования! – Morten Holmgaard 14 October 2015 в 12:21
  • 3
    Переименование соответствует документу: ярлык в Identity Inspector - переименуйте его там, он всегда будет работать. – Morten Holmgaard 16 October 2015 в 08:26

Вот проект, в котором вы можете четко видеть, что это ошибка интерфейса Builder. Я сообщил об этом, но не ответил. Id - 22972580.

DelegateBug.zip

0
ответ дан Ako 19 August 2018 в 17:22
поделиться
  • 1
    Ошибка все еще существует. Я реализовал карусель. Когда я установил источник данных и делегат моего UIVIew в контроллер представления («желтый круг»), он изменил название сцены на «Источник данных». Попробовали переименовать сцену, заголовок, идентификатор раскадровки и т. Д., Ничего не помогает. Я даже попытался изменить его в исходном коде рассказа. – Katherine Jenkins 1 May 2016 в 04:15
  • 2
    На самом деле, @bunty имеет правильное значение в своем ответе ниже. Хотя первоначально у меня было длинное название сцены (это было прекрасно видно как название сцены), добавление моего делегата и источников данных UIVIew в ViewController изменило имя на источник данных для каждой соответствующей сцены. Но сокращение названия теперь, похоже, делает трюк. – Katherine Jenkins 1 May 2016 в 04:24

Добавление к @Steve Wilford. Ответ:

В доске объявлений Xcode 7 есть ограничение по длине имени контроллера вида, которое будет отображаться в левой панели, которая составляет 15 символов. Все имена, имеющие более 15 символов, будут изменены на странное имя, например «Делегатная сцена» или «Сцена источника данных».

2
ответ дан bunty 19 August 2018 в 17:22
поделиться

У меня нет прямого ответа, но место для просмотра. К сожалению, это превышает пространство для комментариев, поэтому я должен его здесь поместить. Сожалею.

Если вы выберите раскадровку в проводнике проекта, вы можете открыть исходный код. Раскадровки - это всего лишь файлы XML. Как выглядит viewcontroller? Сравните это со ссылкой, например, с недавно созданной. Возможно, вы можете поделиться частью xml диспетчера представлений? Пример с одним (из коробки) контроллером представления:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="8191" systemVersion="15A284" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
    <dependencies>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8154"/>
    </dependencies>
    <scenes>
        <!--View Controller-->
        <scene sceneID="tne-QT-ifu">
            <objects>
                <viewController id="BYZ-38-t0r" customClass="ViewController" customModule="eee" customModuleProvider="target" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
                        <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <animations/>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
                    </view>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
            </objects>
        </scene>
    </scenes>
</document>
1
ответ дан Helge Becker 19 August 2018 в 17:22
поделиться

Проверьте свойство title вашего контроллера просмотра, имя контроллера представления поступает либо из свойства заголовка, либо из класса. (Заголовок имеет приоритет)

Снимок экрана

Также вы можете переименовать контроллер вручную, если хотите, как было предложено Стивом

1
ответ дан Nakul 19 August 2018 в 17:22
поделиться

Выберите View Controller -> Identity Inspector -> Document Label и переименуйте его здесь.

Это сработало для меня.

1
ответ дан Vinoth Vino 19 August 2018 в 17:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: