Предупреждение: не удалось загрузить какую-либо информацию о классе Objective-C с помощью кода PaintCode.

Я пытаюсь рисовать карты svg, используя код, сгенерированный с помощью кода краски. Код работает нормально, когда я запускаю его с помощью симулятора. Но если я запускаю его на устройстве (iPad), он падает в методе drawCanvas, давая

Предупреждение. Не удалось загрузить какую-либо информацию о классе Objective-C. Это значительно снизит качество доступной информации о типах.

Снимок экрана с предупреждением

Нажмите здесь, чтобы просмотреть предупреждающий снимок экрана

Я рисую карту в раскадровке, где в поле зрения есть прокрутка и внутри этого изображения. Я добавил один объект StyleKitClass (StyleKitClass — это класс NSObject, сгенерированный с помощью приложения PaintCode), с которым я подключился через IBOutlet Collections к imageView.

Выходные соединения

Нажмите здесь, чтобы просмотреть подключения к розеткам

Если кто знает, помогите с решением.


person PriyaJain    schedule 26.07.2016    source источник
comment
Это предупреждение не является причиной сбоя. Это просто сообщение от отладчика. Не могли бы вы попробовать включить Address Sanitizer и снова запустить код?   -  person Tricertops    schedule 26.07.2016
comment
Я включил средство очистки адресов. Но в консоли ничего не печатает. Кроме того, когда я печатаю историю памяти с адресом памяти, она не дает никакого значения.   -  person PriyaJain    schedule 26.07.2016
comment
Но я обнаружил одну вещь во время предупреждения в + (void)drawCanvas1, а именно, в представлении переменных адрес для класса styleKit - self=(class)0x0. Кажется, что StyleKit освобожден.   -  person PriyaJain    schedule 26.07.2016
comment
Никогда не видел эту проблему раньше. Похоже, сбой происходит до запуска этого метода, поэтому self содержит какое-то случайное значение (0x20 на вашем скриншоте). Вы используете АРК? Вы изменяли сгенерированный код? Попробуйте вызвать этот метод из другого места, чтобы посмотреть, что произойдет.   -  person Tricertops    schedule 26.07.2016
comment
Нет, я не модифицировал сгенерированный код. Я просто перетащил классы StyleKit в свой проект и начал использовать, как описано в руководствах. Кроме того, я не использую ARC. Я попробую вызвать метод из другого места.   -  person PriyaJain    schedule 26.07.2016
comment
Попробуйте добавить метод -dealloc в StyleKit и печатать, когда он будет освобожден — может быть, до этого сбоя? Кроме того, вы должны использовать ARC.   -  person Tricertops    schedule 26.07.2016
comment
Я попытался воспроизвести ту же ошибку, вызвав метод сортировки массива без цикла for. Это метод, вызывающий сам себя снова и снова. Когда массив содержит 200 значений, в iphone отображается такая же ошибка. Я заметил, что он хорошо работает в симуляторе, как только мы меняем массив на 400 значений, он также падает в симуляторе с той же ошибкой.   -  person Sujananth    schedule 26.02.2018


Ответы (3)


Я работаю в PixelCut, мы делаем PaintCode.

После того, как вы прислали нам проект, я смог подтвердить эту проблему, запустив его на iPhone 5s. К сожалению, вы доводите PaintCode, Xcode и iOS до предела их возможностей, пытаясь использовать метод рисования с 53 тысячами строк кода. Этот единственный метод занимает 9 МБ в бинарном виде (только для arm64, -Onone) и использует почти 1000 переменных типа указателя. Насколько я понимаю, приложение достигает некоторых пределов размера стековой памяти и завершается системой.

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

person Tricertops    schedule 27.07.2016
comment
Есть ли другой способ, чем использовать PaintCode, поскольку у меня нет другого пути. В моем проекте более 50 таких карт. На данный момент я храню их в виде файла jpg. Но при увеличении изображение становится пиксельным. Я пытался использовать для этого изображение svg. Затем я обнаружил, что PaintCode оказался полезным. - person PriyaJain; 28.07.2016
comment
Есть ли что-то еще, что мы можем сделать с изображением, поскольку разделение этих множества карт, я думаю, невозможно. - person PriyaJain; 28.07.2016
comment
Есть ли способ разделить изображение с помощью PaintCode? - person PriyaJain; 28.07.2016
comment
Вы можете попробовать использовать PDF и нарисовать его с помощью CGPDFDocument. Это сохранит качество вектора, но может быть медленным. Вам может понадобиться хороший механизм тайлинга, чтобы рисовать только видимые части, но у меня нет решения для этого. - person Tricertops; 28.07.2016
comment
Ok. Я попробую это. Большое спасибо за вашу поддержку @Tricertops. - person PriyaJain; 28.07.2016
comment
полезная информация. Я никогда не думаю о проблеме с памятью в методе drawRect. - person Teja Nandamuri; 28.07.2016

Это случилось со мной недавно, было вызвано опечаткой имени файла в коде ViewController.swift.

person eplazai    schedule 16.03.2017

Попробуйте поставить @objc перед используемыми функциями, например:

@objc func myFunction() {

Подробнее об объективной совместимости C здесь: https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithObjective-CAPIs.html

person ScottyBlades    schedule 30.10.2017