수색…


소개

iOS 알림은 느슨하게 결합 된 방식으로 데이터를 보내는 간단하고 강력한 방법입니다. 즉, 알림을 보낸 사람은 누구에게 알림을 받는지 신경 쓸 필요가 없습니다. 앱의 나머지 부분에 알림을 게시하기 만하면 많은 정보를 얻을 수 있습니다. 앱 상태.

출처 : - Swift로 해킹

매개 변수

매개 변수 세부
이름 옵저버를 등록 할 통보의 이름. 즉,이 이름의 통지 만이 조작 대기 행렬에 블록을 추가하는 데 사용됩니다. nil을 전달하면 알림 센터는 알림 대기열에 블록을 추가할지 여부를 결정하기 위해 알림 이름을 사용하지 않습니다.
obj 관찰자가 수신하기를 원하는 통지를 가진 객체. 즉,이 보낸 사람이 보낸 알림 만 관찰자에게 배달됩니다. nil을 전달하면 알림 센터는 통지 발신자를 사용하여이를 관찰자에게 전달할지 여부를 결정하지 않습니다.
블록을 추가해야하는 작업 대기열입니다. nil을 전달하면 게시 스레드에서 블록이 동 기적으로 실행됩니다.
블록 통지가 수신 될 때 실행될 블록. 블록은 관찰자 등록이 제거 될 때까지 통지 센터와 사본 (사본)에 의해 복사됩니다.

비고

NSNotificationCenter 객체 (또는 단순히 알림 센터)는 프로그램 내에서 정보를 브로드 캐스팅하기위한 메커니즘을 제공합니다. NSNotificationCenter 객체는 본질적으로 알림 디스패치 테이블입니다.

자세한 정보는 Apple Documentation을 확인 하십시오.

스위프트의 NSNotification & NSNotificationCenter

옵저버 추가하기

명명 규칙

알림은 다음과 같이 구성된 전역 NSString 객체로 식별됩니다.

Name of associated class + Did | Will + UniquePartOfName + Notification

예 :

  • NSApplicationDidBecomeActiveNotification
  • NSWindowDidMiniaturizeNotification
  • NSTextViewDidChangeSelectionNotification
  • NSColorPanelColorDidChangeNotification

스위프트 2.3

NSNotificationCenter.defaultCenter().addObserver(self, 
                                                 selector: #selector(self.testNotification(_:)), 
                                                 name: "TestNotification", 
                                                 object: nil)

스위프트 3

NSNotificationCenter.default.addObserver(self, 
                                         selector: #selector(self.testNotification(_:)), 
                                         name: NSNotification.Name(rawValue: "TestNotification"), 
                                         object: nil)

목표 -C

[[NSNotificationCenter defaultCenter] addObserver:self 
                                      selector:@selector(testNotification:) 
                                      name:@"TestNotification" 
                                      object:nil];

추신 : 관찰자가 추가 된 횟수는 관찰자가 제거 된 횟수와 정확하게 일치해야한다는 것도 주목할 가치가 있습니다. 신인 실수는 UIViewController의 viewWillAppear: 에 관찰자를 추가하지만 viewDidUnload: 에서 관찰자를 제거하면 푸시 횟수가 고르지 않게되어 관찰자가 유출되어 알림 선택자가 불필요하게 호출됩니다.

옵저버 제거

스위프트 2.3

//Remove observer for single notification
NSNotificationCenter.defaultCenter().removeObserver(self, name: "TestNotification", object: nil)
    
//Remove observer for all notifications
NotificationCenter.defaultCenter().removeObserver(self)

스위프트 3

//Remove observer for single notification
NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "TestNotification"), object: nil)

//Remove observer for all notifications
NotificationCenter.default.removeObserver(self)

목표 -C

//Remove observer for single notification
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"TestNotification" object:nil];
    
//Remove observer for all notifications
[[NSNotificationCenter defaultCenter] removeObserver:self];

통지 게시

빠른

NSNotificationCenter.defaultCenter().postNotificationName("TestNotification", object: self)

목표 -C

[[NSNotificationCenter defaultCenter] postNotificationName:@"TestNotification" object:nil];

데이터로 알림 게시

빠른

let userInfo: [String: AnyObject] = ["someKey": myObject]
NSNotificationCenter.defaultCenter().postNotificationName("TestNotification", object: self, userInfo: userInfo)

목표 -C

NSDictionary *userInfo = [NSDictionary dictionaryWithObject:myObject forKey:@"someKey"];
[[NSNotificationCenter defaultCenter] postNotificationName: @"TestNotification" object:nil userInfo:userInfo];

알림 관찰

빠른

func testNotification(notification: NSNotification) {
    let userInfo = notification.userInfo
    let myObject: MyObject = userInfo["someKey"]
}

목표 -C

- (void)testNotification:(NSNotification *)notification {
    NSDictionary *userInfo = notification.userInfo;
    MyObject *myObject = [userInfo objectForKey:@"someKey"];
}

블록이있는 옵저버 추가 / 제거

선택자와 함께 관찰자를 추가하는 대신 블록을 사용할 수 있습니다.

id testObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"TestNotification"
                                                                    object:nil 
                                                                     queue:nil 
                                                                usingBlock:^(NSNotification* notification) {
    NSDictionary *userInfo = notification.userInfo;
    MyObject *myObject = [userInfo objectForKey:@"someKey"];
}];

관찰자는 다음을 사용하여 제거 할 수 있습니다.

[[NSNotificationCenter defaultCenter] removeObserver:testObserver 
                                                name:@"TestNotification"
                                              object:nil];

관찰자를 추가하고 이름을 제거하십시오.

// Add observer
let observer = NSNotificationCenter.defaultCenter().addObserverForName("nameOfTheNotification", object: nil, queue: nil) { (notification) in
    // Do operations with the notification in this block
}

// Remove observer
NSNotificationCenter.defaultCenter().removeObserver(observer)


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow