2012-01-23 1 views
0

알림을위한 내 TableViewCell 등록. 하지만 언제 알지 못하기 때문에 등록을 취소 할 수는 없습니다. NSNotificationCenter를 하위 클래스로 만들려고했지만 올바른 방법으로 시도하지 않았습니다.NSNotificationCenter 무효로 게시 -> 충돌

몇 가지 아이디어가이 문제를 해결하는 방법?

+0

언제 등록합니까? – Till

+0

알림의 성격에 대해 좀 더 자세히 설명해 주셔야합니다. 언제 등록합니까, 언제 등록을 취소 하시겠습니까? dealloc은 실행 가능합니까? –

답변

1

전통적인 접근 방법은 UIViewController 파생 클래스에 알림을 등록하고 viewDidLoad에 등록하고 viewDidUnload에 등록을 취소하는 것입니다.

UIView 파생 클래스의 경우 디스플레이 로직과 비즈니스 로직 코드를 혼합하여 올바른 방법을 사용하면 실제로 두 번 생각해야합니다. 그러나 initWithFrame에 등록하고 dealloc에 등록을 취소 할 수 있습니다. UITableViewCell 이후

은 오른쪽 장소 initWithStyle에 등록 할 수 있고 (경우에 당신이 당신의 세포를 재사용하지 않음)뿐만 아니라 dealloc에 등록 취소 파생 UIView입니다. 여기

+0

내 tableviewcell을 다운로드 시작시 등록하십시오. 다운로드가 끝나면 (그리고 이미 작동 중) 셀이 보이는 화면 밖으로 스크롤되면 등록을 취소하고 싶습니다. 하지만 화면을 종료하는 것에 대한 정보를 얻지 못했습니다. –

+0

셀을 다시 사용할 수 있기 때문에 그걸 얻지 못할 것이다. 이것은 잘못된 접근 방식의 좋은 예입니다. 보기에서하지만 컨트롤러에서 이렇게하지 마십시오. 전체 접근 방식을 다시하고 비즈니스 로직에 대한 뷰가 아닌 컨트롤러를 사용하십시오. – Till

+0

그러나 NotificationCenter가 관찰자가 nil이되는지 확인하면 모든 것이 잘됩니다. 추적 할 백 셀이있는 컨트롤러에서 셀까지의 다운로드 및 알림을 추적 할 수 없습니다. –

2

문제는 UITableViewCell 거의 dealloc를 얻을 수 없다는 것입니다 prepareForReuse 방법 '보통 당신이 원하는 당신의 하위 클래스에서 [[NSNotificationCenter defaultCenter] removeObserver:self]를 호출하는 것입니다

에드'. (구현시 [super prepareForReuse];으로 전화하십시오!)

+0

+1 실행 가능한 솔루션에 대한 – Till

+0

BTW, 당신이 일을하고있는 경우 당신이 아마 잡초에 @ Till의 의견에 동의하고 이것이 컨트롤러에서 처리되도록 리팩토링을 고려할 수 있습니다. –