Я сделал новый проект OS X в Xcode 8, добавил одно (изображение). Я перетащил его в исходный файл ViewController по умолчанию, чтобы добавить @IBOutlet (с именем «изображение»). Тогда в viewDidLoad()
, я добавил:Почему слой должен быть nil, после wantLayer = true?
image.wantsLayer = true
image.layer!.cornerRadius = 10
Около половины времени, это работает отлично, и примерно половину времени, он умирает с:
fatal error: unexpectedly found nil while unwrapping an Optional value
, указывая на второй линии, и в отладчик:
(lldb) po image.wantsLayer
true
(lldb) po image.layer
nil
ли установка wantsLayer
предполагается создать layer
сразу? Документация, кажется, предлагает это, но я не могу найти утверждение, которое делает это явным.
Я видел много кода, like this, что делает NSView сделать:
self.wantsLayer = true
self.layer!.backgroundColor = ...
так кажется, что он должен. Зачем layer
быть nil, после установки wantsLayer
? Должен ли я установить layer
сам, даже если я попрошу wantsLayer
?
см https://www.objc.io/issues/14-mac/appkit-for-uikit-developers/, который дает некоторые предупреждения о том, как подать в суд на слой при поддержке объекты слоя с изображением – Volker
Фолькер: хороший ресурс! Что я получаю от этого, так это то, что весь код, который делает то, что я написал, на самом деле не так, и что мне нужно использовать путь 'wantUpdateLayer', если я хочу установить свойства на CALayer. (Это решает одну из моих проблем, но не все). Если вы опубликуете это как «ответ», я приму это. – Naha