0

그래서 두 개의 뷰 컨트롤러가 동시에 표시됩니다. 목표는 다음과 같습니다. 메뉴를 누르면 인덱스가 반환됩니다. 그러면 업데이트해야 할 다른 화면이 나타납니다. (메뉴)NSNotification userinfo는 누름 버튼을 누를 때 계속 누적됩니다.

func carbonTabSwipeNavigation(carbonTabSwipeNavigation: CarbonTabSwipeNavigation, didMoveAtIndex index: UInt) { 
    //NSLog("Did move at index: %ld", index) 
     //NSNotification to send data 
     NSNotificationCenter.defaultCenter().postNotificationName(NotificationNames.GetIndexCarbonKit, object: nil, userInfo: ["clickedIndex" : Int(index)]) 
} 

컨트롤러 B (수신기)

제어기 A

override func viewWillAppear(animated: Bool) { 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(SearchResults.didReceiveNotification(_:)), name: NotificationNames.GetIndexCarbonKit, object: nil) 
} 


func didReceiveNotification(notification: NSNotification) { 
    let index:Dictionary<String,Int> = notification.userInfo as! Dictionary<String,Int> 
    let messageFromNotification = index["clickedIndex"] 
    print(" SearchResults now shows index: \(messageFromNotification)") 
} 

내 문제는 다음입니다 :

나는 다음을 수행하고있는 사전있는 나는 인덱스를 A에서 B로 보내고 계속 스태킹합니다. 따라서 메뉴를 여러 번 누르면 내 결과는 다음과 같습니다.

SearchResults now shows index: Optional(0) 
SearchResults now shows index: Optional(1) 
SearchResults now shows index: Optional(1) 
SearchResults now shows index: Optional(2) 
SearchResults now shows index: Optional(2) 
SearchResults now shows index: Optional(2) 
SearchResults now shows index: Optional(3) 
SearchResults now shows index: Optional(3) 
SearchResults now shows index: Optional(3) 
SearchResults now shows index: Optional(3) 
SearchResults now shows index: Optional(1) 
SearchResults now shows index: Optional(1) 
SearchResults now shows index: Optional(1) 
SearchResults now shows index: Optional(1) 
SearchResults now shows index: Optional(1) 

어떻게 마지막 색인 만 얻을 수 있습니까? 나는 다른 것들의 스택을 필요로하지 않는다.

답변

1

이 정답을 찾을 수 클래스에 변수를 선언하고 마지막으로 클릭 된 인덱스마다 시간을 얻을 것이다, 그래서 당신이 그것을 검색하는 변수에 인덱스를 설정하려면 자기. 분명히 ViewWillAppear에 NotificationCenter를 추가하고 ViewWillDisappear에서 제거해야했습니다. 보기간에 메뉴를 전환하면 (같은보기의 4 배) 한 값만 표시됩니다.

override func viewWillAppear(animated: Bool) { 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(SearchResults.didReceiveNotification(_:)), name: NotificationNames.GetIndexCarbonKit, object: nil) 
} 

override func viewWillDisappear(animated: Bool) { 
    NSNotificationCenter.defaultCenter().removeObserver(self) 
} 

func didReceiveNotification(notification: NSNotification) { 
    let index:Dictionary<String,Int> = notification.userInfo as! Dictionary<String,Int> 
    self.currentIndex = (index.first?.1)! 
    print(currentIndex) 
} 
0

viewdidappear에서 사용하지 마십시오! ViewController에서 두 번 이상 호출되는 메소드입니다. 대신 viewDidLoad에서 사용하십시오.이 경우에만 이 실행되며보기 제어기가로드됩니다.
그리고 당신이

func didReceiveNotification(notification: NSNotification) 

및 기능 사용 후 전화를해야 :

deinit { 
NSNotificationCenter.defaultCenter().removeObserver(self) 
} 
+0

감사합니다. 정보를 제공해 주셔서 감사합니다. 사전은 스태킹을 멈추지 않습니다. – SoundShock

+0

수정 된 답변을 확인하십시오. viewDidLoad에서 호출해서는 안됩니다. – Dershowitz123

+0

'func didReceiveNotification'은 옵저버를 추가 한 후에 만 ​​호출되기 때문에 그렇게 할 수 없습니다. 따라서 NSNotificationCenter.defaultCenter(). addObserver (self, selector : #selector (SearchResults.didReceiveNotification (_ :)) ' – SoundShock

0

이 사전이 실제로 스태킹 아니면은 그냥 콘솔 창에 출력? 무슨 일이 일어나고 있는지 보려면 메뉴 버튼을 누를 때마다 콘솔 창을 지워보십시오. 색인은 해당 기능으로 범위가 지정되므로 해당 기능이 완료되면 색인이 사라집니다.

+0

실제로 스태킹 중입니다. 3 번째 푸시 후 콘솔을 청소하고 4 번째 검색 결과를 얻었습니다. SearchResults는 이제 인덱스를 보여줍니다 : Optional (3) SearchResults는 이제 인덱스를 보여줍니다 : Optional (3) SearchResults는 이제 인덱스를 보여줍니다 : Optional (3) SearchResults는 이제 인덱스를 보여줍니다 : 선택 사항 (3) – SoundShock

+0

사전에는 하나의 값만 포함되지만 게시물 알림을 여러 번 실행합니다. didReceiveNotification 함수를 중단하면 각 버튼 누름에 대해 여러 번 순환을 추측합니다. 포스트가하는 코드는 어떻게 생겼습니까? – Haligen

+0

질문에 코드를 추가했습니다. 그것은 CarbonKit의 함수입니다. 그러나 NSLog를 검사하면 해당 인덱스를 한 번만 호출합니다 – SoundShock

0

당신은 마지막으로 클릭 된 인덱스 그냥

func didReceiveNotification(notification: NSNotification) { 
    let index:Dictionary<String,Int> = notification.userInfo as! Dictionary<String,Int> 
    self.messageFromNotification = index["clickedIndex"] 
    print(" SearchResults now shows index: \(messageFromNotification)") 
}