Не удалось создать модуль «Foundation», «UIKit», «CoreFoundation» на Xcode 9.3 и Xcode 9.4 [duplicate]

Что такое NullPointerException?

Хорошим местом для начала является JavaDocs . Они охватывают это:

Брошено, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  • Вызов метода экземпляра нулевого объекта.
  • Доступ или изменение поля нулевого объекта.
  • Выполнение длины null, как если бы это был массив.
  • Доступ или изменение слотов с нулевым значением, как если бы это был массив.
  • Бросать нуль, как если бы это было значение Throwable.

Приложения должны бросать экземпляры этого класса для указания других незаконных видов использования нулевого объекта.

blockquote>

Также, если вы попытаетесь использовать нулевую ссылку с synchronized, который также выдаст это исключение, за JLS :

SynchronizedStatement:
    synchronized ( Expression ) Block
  • В противном случае, если значение выражения равно null, NullPointerException.
blockquote>

Как это исправить?

Итак, у вас есть NullPointerException. Как вы это исправите? Возьмем простой пример, который выдает NullPointerException:

public class Printer {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public void print() {
        printString(name);
    }

    private void printString(String s) {
        System.out.println(s + " (" + s.length() + ")");
    }

    public static void main(String[] args) {
        Printer printer = new Printer();
        printer.print();
    }
}

Идентифицирует нулевые значения

. Первый шаг - точно определить , значения которого вызывают исключение . Для этого нам нужно выполнить некоторую отладку. Важно научиться читать stacktrace . Это покажет вам, где было выбрано исключение:

Exception in thread "main" java.lang.NullPointerException
    at Printer.printString(Printer.java:13)
    at Printer.print(Printer.java:9)
    at Printer.main(Printer.java:19)

Здесь мы видим, что исключение выбрано в строке 13 (в методе printString). Посмотрите на строку и проверьте, какие значения равны нулю, добавив протоколирующие операторы или используя отладчик . Мы обнаруживаем, что s имеет значение null, а вызов метода length на него вызывает исключение. Мы видим, что программа перестает бросать исключение, когда s.length() удаляется из метода.

Трассировка, где эти значения взяты из

Затем проверьте, откуда это значение. Следуя вызовам метода, мы видим, что s передается с printString(name) в методе print(), а this.name - null.

Трассировка, где эти значения должны быть установлены

Где установлен this.name? В методе setName(String). С некоторой дополнительной отладкой мы видим, что этот метод вообще не вызывается. Если этот метод был вызван, обязательно проверьте порядок , что эти методы вызывают, а метод set не будет называться после методом печати. ​​

Этого достаточно, чтобы дать нам решение: добавить вызов printer.setName() перед вызовом printer.print().

Другие исправления

Переменная может иметь значение по умолчанию setName может помешать ему установить значение null):

private String name = "";

Либо метод print, либо printString может проверить значение null например:

printString((name == null) ? "" : name);

Или вы можете создать класс, чтобы name всегда имел ненулевое значение :

public class Printer {
    private final String name;

    public Printer(String name) {
        this.name = Objects.requireNonNull(name);
    }

    public void print() {
        printString(name);
    }

    private void printString(String s) {
        System.out.println(s + " (" + s.length() + ")");
    }

    public static void main(String[] args) {
        Printer printer = new Printer("123");
        printer.print();
    }
}

См. также:

Я все еще не могу найти проблему

Если вы попытались отладить проблему и до сих пор не имеете решения, вы можете отправить вопрос для получения дополнительной справки, но не забудьте включить то, что вы пробовали до сих пор. Как минимум, включите stacktrace в вопрос и отметьте важные номера строк в коде. Также попробуйте сначала упростить код (см. SSCCE ).

17
задан Yuriy 15 September 2014 в 07:19
поделиться

18 ответов

Что-то, что могло бы помочь установить местоположение Derived Data в «Relative» в настройках XCode, затем Clean & amp; Build

XCode derived data location [/g0]

8
ответ дан abinop 19 August 2018 в 05:10
поделиться
  • 1
    Волшебно, это сработало. – James Perih 17 October 2014 в 22:09
  • 2
    Но размер приложения увеличивается. Он создает папку «Производные данные» в приложении и ее размер составляет 67 МБ. :( – S R Nayak 30 October 2014 в 13:42
  • 3
    Если вам нужно установить это значение с помощью скрипта, вы можете прочитать / записать его с помощью plutil: plutil -extract IDECustomDerivedDataLocation xml1 -o - ~/Library/Preferences/com.apple.dt.Xcode.plist – ZeWaren 16 May 2018 в 07:30

Пожалуйста, don't make the same mistake, как я. В моем случае я случайно ввел некоторые слова в файл фреймворка Foundation.

19
ответ дан chinnawatp 19 August 2018 в 05:10
поделиться
  • 1
    Ха-ха. ЛОЛ. Вот что я сделал. – Rishab 10 September 2016 в 14:17
  • 2
    Необычная, та же проблема. Почему эти файлы доступны для редактирования? – zeroimpl 10 October 2016 в 00:59
  • 3
    О человек ... Это именно то, что я сделал! Спасибо. Я просто удивлен, потому что мой XCode 8 не показывает это предупреждение, когда я случайно меняю файл системного заголовка ... – cicerocamargo 19 October 2016 в 17:18
  • 4
    Как вы это разрешили? – Kenn Cal 24 October 2016 в 01:57
  • 5
    просто удалите то, что вы случайно набрали из файла фреймворка основания. – chinnawatp 24 October 2016 в 03:25

Предположим, вы изменили или удалили что-либо в структуре UIKit, а затем эту ошибку.

Если вы можете найти этот класс или файл .h, который нужно изменить или удалить, замените это содержимое всего файла в этом файле .h из другого Xcode системы (подтвердите, что это должна быть аналогичная версия Xcode).

Например, в файле UIView.h - я удалил метод и закрыл и открыл Xcode. Тогда я не смог бы вернуть этот код.

0
ответ дан Dsh 19 August 2018 в 05:10
поделиться

Уже пробовал все решения выше. Я все еще не мог решить свою проблему. Поэтому я удаляю Xcode и переустанавливаю его. Он работал магически. Надеюсь, это поможет.

0
ответ дан Ezfen Zhang 19 August 2018 в 05:10
поделиться

Очистка Производные данные работали для меня

0
ответ дан hsafarya 19 August 2018 в 05:10
поделиться

Полная очистка + удаление полученных данных для меня.

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

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

Затем очистите, постройте. Теперь раскомментируем импорт UIKIt, build. СЕЙЧАС раскомментируйте код UICollectionViewController, снова создайте.

15
ответ дан Jason Spittel 19 August 2018 в 05:10
поделиться

Эта ошибка произошла со мной, когда я случайно изменил структуру uikit. Удаление и повторное добавление каркаса uikit в бинарнике ссылок с библиотекой, очистка полученных данных и перезапуск xcode не сработали. Я не хочу удалять свой xcode, поэтому я попытался скопировать коды класса, которые я мог бы изменить из другого компьютера с помощью xcode, который отлично работает и вставляет его в мой. Это сработало!

0
ответ дан jongsky 19 August 2018 в 05:10
поделиться

Я случайно редактировал файл Foundation framework. Так что UIKit.framework получил коррумпированность. Единственное решение - восстановить оригинал.

У вас есть 2 решения:

1. Просто переустановите XCode.

ИЛИ

2. Скопируйте Framework с другого Mac (с той же версией XCode) & amp; вставить в ваш.

Местоположение :

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks
4
ответ дан Lal Krishna 19 August 2018 в 05:10
поделиться

Убедитесь, что ни один из файлов не отредактирован в фрейме UIKit, расположенном внутри Xcode.

2
ответ дан psobko 19 August 2018 в 05:10
поделиться

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

0
ответ дан saurabh rathod 19 August 2018 в 05:10
поделиться

Проверьте, выбрана ли соответствующая цель или нет из active scheme selector. Выбор Generic iOS Device решил мою проблему.

Нажмите, чтобы выбрать симулятор

Выберите Generic iOS Device

2
ответ дан Sazzad Hissain Khan 19 August 2018 в 05:10
поделиться
  • 1
    Но я хочу построить и запустить тест на симуляторе: / теперь что? – Eddie 1 July 2016 в 10:46

Очистка проекта и перезагрузка xCode работали для меня.

0
ответ дан svvoff 19 August 2018 в 05:10
поделиться

По какой-то причине ваш UIKit.framework поврежден, либо скопируйте рабочую UIKit.framework из другого места в

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks

Или переустановите Xcode, исправив проблему.

7
ответ дан tamir007 19 August 2018 в 05:10
поделиться
  • 1
    Правильно. Это произошло, когда я случайно набрал что-то в UICollectionView.h. Вместо переустановки xcode, заменяя конкретный файл физически внутри sdk-папки другой новой копией этого заголовка из sdk моего друга, это решило это. – Adil Soomro 17 February 2017 в 13:29
  • 2
    Спасибо друг! Я работал над pod для tvOS и не прошел проверку, потому что у меня был UIKit.framework. Просто обновите UIKit.framework в папке /Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator10.1.sdk/System/Library/Frameworks , и все работает как шарм. – AlbertoMDF 18 May 2017 в 11:12
  • 3
    Замена UICollectionView.h на raw.githubusercontent.com/PeqNP/ObjC-Stub/master/bin/… Помогла мне, просто найдите UICollectionView с Shift + CMD + O – Oleh Kudinov 14 July 2017 в 17:13
  • 4

Если ваш проект строит для другой цели (например, он создает для симулятора и НЕ ваше устройство), то подтверждается, что вы случайно отредактировали один из файлов заголовков фреймворков для этой цели. Поврежденная структура - это тот, который вы получаете для компиляции ошибок.

0
ответ дан Thomas Elliot 19 August 2018 в 05:10
поделиться

Если у вас есть два Xcode, тогда удалите оба и снова установите Xcode.it для меня.

4
ответ дан vikas prajapati 19 August 2018 в 05:10
поделиться

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

Например, у вас есть Xcode 7.2 и вы хотите запустить приложение на устройстве с iOS 9.2.1. Поэтому вам нужно только обновить Xcode.

И еще одна вещь Base Sdk в настройках сборки всегда больше или равна номеру версии программного обеспечения на вашем устройстве разработки.

0
ответ дан Waris Shams 19 August 2018 в 05:10
поделиться

Если очистка проекта и удаление «полученных данных» не работают, попробуйте изменить «Цель развертывания» (на вкладке «Общие») с 7.0 до 7.1. Надеюсь, что это поможет.

3
ответ дан Yedidya Reiss 19 August 2018 в 05:10
поделиться
  • 1
    это действительно помогло мне решить некоторые другие проблемы – helloGo 20 January 2015 в 08:21
  • 2
    Удивительно, исправьте мое дело магически. – Scofield Tran 29 January 2015 в 03:04
0
ответ дан Max 30 October 2018 в 17:06
поделиться