2016-07-11 7 views
7

Swift 3에서 새 알림이 현재 작동하지 않습니까? 사용자 지정보기의 touchesBegan()에서Swift의 NSNotifications 3

NotificationCenter.default().post(name: DidTouchParticleView, 
            object: self.particle as? AnyObject) 

내가 존재하는 경우 뷰 컨트롤러에 particle 객체를 보낼 필요가 : 내가 뭐하는 거지. 그래서 이렇게 :보기 컨트롤러의 viewDidLoad()에서는

NotificationCenter.default().addObserver(forName: DidTouchParticleView, 
             object: self, 
             queue: OperationQueue.main(), 
             using: presentParticleDisplayView(notification:)) 

에 있습니다. 그 특정 뷰 컨트롤러가 사용자 정의보기를 탭할 때 표시되는 컨트롤러라고 확신하지만, presentParticleDisplayView(notification:) 함수는 호출되지 않습니다.

let DidTouchParticleView = NSNotification.Name("didTouchParticleView") 

베타이 때문에인가, 아니면 내가 뭔가 잘못하고있는 중이 야 :

또한, DidTouchParticleView는 다음과 같이 전역으로 정의된다?

+0

현재 베타 버전과 앞으로 진행될 Swift 3에서는'default()'다음의 괄호가 제거됩니다. 그것은'NotificationCenter.default'입니다. – matt

답변

11

두 번째 매개 변수 메시지 (selector:)가 첫 번째 매개 변수 (대상)로 전송되는 addObserver(_:selector:name:object:)으로 전화하려는 것 같습니다.

대신, 잘못된 방법 인 addObserver(forName:object:queue:using:)을 사용하고 있는데, 이는 매우 다르게 작동합니다.

질문의 두 번째 부분에 관해서는 또한

:

let DidTouchParticleView = NSNotification.Name("didTouchParticleView") 

(거의) 올바른; 그것은이어야합니다

모든 알림 이름은 이제 Notification.Name 인스턴스입니다.

extension Notification.Name { 
    static let didTouchParticleView = Notification.Name("didTouchParticleView") 
} 

당신은 다음 코드를 통해 .didTouchParticleView로 통지의 이름을 참조 할 수 있습니다 :이 작업을 수행 할 수있는 적절한 방법은 말을하는 것입니다.

1

알림을 게시하려면 (object: self) 직접보고 있습니다. 당신은 또는 호출에서 아마도 object: nil과 같은 것을 의미 할 것입니다.하지만 핸들러에서 올바른 입자인지 확인하는 데주의하십시오. 이 방법에 대한 문서를 다시 읽고 object 매개 변수가 무엇인지주의 깊게 메모하십시오.

이 버전의 addObserver은 관찰자 개체를 반환합니다. 저장해야하므로 나중에 removeObserver을 호출 할 수 있습니다.

+0

'object'를 nil로 변경하면 해결됩니다. 그러나 관찰자가 된 것은 어떻게 알 수 있습니까? 전에 스위프트 2에서 관찰자로 객체를 가져 오는 addObserver :가있었습니다. –

+1

@YoussefSami 아니요, 이전에 무슨 일이 있었는지 이해하지 못했습니다. '객체'는 관찰자가 아닙니다. 관찰자는 호출로부터 _ 복귀됩니다. 이것을'addObserver (_ : selector : name : object :)'와 혼동하지 마십시오. 첫 번째 매개 변수는 옵저버입니다. 편집 된 답변보기. – matt

+0

@matt 네, 그게 제가 언급 한 것입니다. 그러면 알림 센터는 이제 알림을 보낼 개체를 어떻게 알 수 있습니까? –