SceneKit падает, когда я использую ограничение и минимизирую приложение - PullRequest
0 голосов
/ 22 мая 2018

У меня в приложении очень странное поведение, которое я не могу объяснить.У меня запущен сеанс SceneKit, и некоторым nodes назначено constraints (независимо от того, какого типа).Когда приложение переходит в фоновый режим, я удаляю все nodes из scene, а когда оно появляется снова, я добавляю их снова (это необходимо по причинам, которые здесь не нужны).Когда мне назначают constraints и возобновляют работу приложения, происходит сбой.Не всегда, но очень часто.Я понятия не имею, что делать, чтобы это исправить.Я пытался удалить constraints при удалении nodes, но это не помогло.Я получаю ошибку на скриншоте.Может ли кто-нибудь помочь мне найти решение?

enter image description here

1 Ответ

0 голосов
/ 22 мая 2018

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

Не входя вглубина около сильных против слабых переменных, у вас, вероятно, есть переменная weak или unowned (к этому ограничению), которая становится nil и к которой вы пытаетесь получить доступ (путем принудительного развертывания).

Когда вы удаляете эти узлы или когда представление исчезает, ограничение освобождается из памяти.Таким образом, исправление здесь заключается в том, чтобы либо сделать ссылку на это ограничение strong, либо создать новое ограничение, сохранить строгую ссылку на него в классе и присвоить это ограничение объекту.

Предполагая, что вы ссылаетесьзаменить на раскадровку, замените:

@IBOutlet weak var constraint: NSLayoutConstraint!

на:

@IBOutlet var constraint: NSLayoutConstraint!

Также обратите внимание, что переменная может быть развернута принудительно (NSLayoutConstraint!). Вероятно, поэтому вы сталкиваетесь с ошибкой EXC_BAD_ACCESS.Установите ограничение как сильную переменную вместо слабой, или, что еще лучше, по возможности избегайте опций принудительного развертывания!

Примечание. Если это не решит вашу проблему, оставьте комментарий после добавления других.детали к вашему вопросу.

...