2016-08-13 3 views
2

ViewController에 세그먼트 컨트롤과 컨테이너가 있습니다. 컨테이너에는 PageViewController가 있습니다. 당신은 변경되는 값 테이블 "사용자"의 "활동"을 제어 세그먼트에서 항목 중 하나를 클릭하면 (SQLite는) 테이블 "사용자". 그래서보기 컨트롤러를 다른보기 컨트롤러에 알리기

username text, active bool 
user1, false 
user2,true 

을 당신이에 USER1를 클릭하면 세그먼트 제어 테이블은 PageViewController의 모든 ViewControllers 데이터베이스의 변화를 인식하고 새로운 사용자와 데이터를 다시로드 방법이 있나요

username text, active bool 
    user1, true 
    user2,false 

로 변경합니다. 이것이 가능하지 않다면 어떻게하는 것이 가장 좋은 방법일까요? 내가 바로 이해하면

친절하게, 당신은 당신이 다른 뷰 컨트롤러에서 분할 컨트롤 값을 변경할 때 일부 뷰 컨트롤러를 통지 할

답변

6

을 간주한다.

이 경우 NSNotificationCenter을 사용할 수 있습니다.

NsNotificationCenter은 옵저버에게 알림을 보냅니다. 그리고 관찰자가 알림을 받으면 뭔가를 할 수 있습니다.

예 :

NSNotificationCenter.defaultCenter().postNotificationName("NotificationIdentifier", object: nil) 

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

func aMethod(notification: NSNotification){ 
    // Do stuff here 
} 
+0

이봐 당신이 일 이잖아 감사합니다! 하지만 오류가있어. PageViewControler의 뷰 중 하나에 레이블을 배치했습니다. 그래서 SegmentControl을 클릭하면 "aMethod"라는 함수가 viewcontroller에서 호출되지만 viewcontroller에서 레이블의 텍스트를 변경하려고 할 때 "치명적인 오류 : 예기치 않게 nil이 선택 값을 언 래핑하는 동안"오류가 발생합니다. 왜 label = nil입니까? viewDidLoad() 함수에서 레이블 텍스트를 문제없이 변경했습니다. – ReasyEasyPeasy

+0

뷰 컨트롤러가 메모리에 아직 할당되지 않았으므로이 상태 여야합니다. viewDidLoad가 호출되지 않았거나 나중에 메모리에서 할당이 해제되었음을 의미합니다. IBOulet은 View Controller가 살아있는 한 살아 있습니다. –

+0

확인. 그래서 "aMethod"에서 self.viewDidLoad()를 호출하고 viewDidLoad()에서 "reloadLabel"함수를 호출하면 레이블은 여전히 ​​nil입니다. ViewController에서 데이터를 다시로드하는 올바른 방법은 무엇입니까? – ReasyEasyPeasy

관련 문제