2016-07-22 4 views
-1

Im получаю эту ошибку:неожиданно нашел ноль - «SetText» - Swift/Watchkit

fatal error: unexpectedly found nil while unwrapping an Optional

... когда я пытаюсь изменить текст метки в контроллере интерфейса, вызова функции из контроллера уведомления, при получении уведомления. Вот мой код:

InterfaceController.swift

func test() { 
    patt.setText("testtesttest") 
} 

NotificationController.swift

let controller = InterfaceController() 
override func didReceiveRemoteNotification(remoteNotification: [NSObject : AnyObject], withCompletion completionHandler: ((WKUserNotificationInterfaceType) -> Void)) { 
    controller.test() 
    completionHandler(.Custom) 
} 

когда я удалить функции и печать прекрасно работает так, почему не делает ошибка исчезает SetText Работа? Как это может быть, когда я устанавливаю его в «testtesttest»?

EDIT: Ошибка брошенные: SetText ("testtesttest")

Заранее спасибо!

+2

Возможный дубликат [Что делает «фатальная ошибка: неожиданно найденная нуль при разворачивании необязательного значения» означает?] (Http://stackoverflow.com/questions/32170456/what-does-fatal-error-unexpectedly-found- nil-while-unwrapping-an-optional-valu) –

+0

@PetahChristian Вопрос, который я задал, отличается от того, который вы считаете его дубликатом ... я отредактировал его более конкретно – BloodWoork

+0

Это не так. Ваш сбой происходит, так как ваш 'patt' неявно разворачивается необязательно, равен нулю, и это покрывается целью обмана. –

ответ

1

Ваша ошибка начинается здесь:

let controller = InterfaceController() 

Вы экземпляр контроллера интерфейса. Тем не менее, он не создается из раскадровки, поэтому его выходы не будут подключены к любой сцене.

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

Это покрывается целью обмана, в разделе «Неявно развернутые варианты».

+0

Итак, где я должен создать экземпляр контроллера? – BloodWoork

+0

Это совершенно не связанный вопрос. Я бы предложил сначала исследовать его, прежде чем публиковать новый вопрос, чтобы узнать, кто-нибудь еще * уже спросил или ответил на это. –

1

Попробуйте это:

fun test() { 
    guard patt != nil else { 
    print("patt doesn't exist!") 
    return 
    } 
    patt.setText("testtesttest") 
} 

Разногласия patt равна нулю. Подождите, пока не появится awakeFromNib, чтобы искать любые выходы. Кроме того, поскольку вы говорите, что это из уведомления, оберните set text в блок отправки, чтобы поместить его в основной поток.

Смежные вопросы