Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone NSNotificationCenter职位为零->;崩溃_Iphone_Ios_Uitableview_Uikit_Nsnotification - Fatal编程技术网

Iphone NSNotificationCenter职位为零->;崩溃

Iphone NSNotificationCenter职位为零->;崩溃,iphone,ios,uitableview,uikit,nsnotification,Iphone,Ios,Uitableview,Uikit,Nsnotification,我的TableViewCell注册通知。但我不能注销,因为我不知道什么时候。 我试图将NSNotificationCenter子类化,但我没有尝试正确的方法 如何解决此问题的一些想法?一种经典方法是在viewdiload中的UIViewController派生类中注册通知,然后在viewdiload中取消注册 对于UIView派生类,如果方向正确(将显示逻辑与业务逻辑代码混合在一起),您应该三思而后行。但是,您可以在initWithFrame中注册,并在dealloc上取消注册 由于UITabl

我的TableViewCell注册通知。但我不能注销,因为我不知道什么时候。 我试图将NSNotificationCenter子类化,但我没有尝试正确的方法


如何解决此问题的一些想法?

一种经典方法是在
viewdiload
中的
UIViewController
派生类中注册通知,然后在
viewdiload
中取消注册

对于
UIView
派生类,如果方向正确(将显示逻辑与业务逻辑代码混合在一起),您应该三思而后行。但是,您可以在
initWithFrame
中注册,并在
dealloc
上取消注册


由于
UITableViewCell
UIView
派生的,因此正确的位置可以是在
initWithStyle
中注册,也可以在
dealloc
中注销(以防您不重用单元格).

一种经典方法是在
viewdiload
中的
UIViewController
派生类中注册通知,然后在
viewdiload
中注销通知

对于
UIView
派生类,如果方向正确(将显示逻辑与业务逻辑代码混合在一起),您应该三思而后行。但是,您可以在
initWithFrame
中注册,并在
dealloc
上取消注册


由于
UITableViewCell
UIView
派生的,因此正确的位置可能是在
initWithStyle
中注册,也可以在
dealloc
中注销(以防您没有重用单元格)。

这里的问题是
UITableViewCell
很少获得
dealloc


通常,您需要在子类“
prepareforeuse
方法”中调用
[[NSNotificationCenter defaultCenter]removeObserver:self]
。(一定要在实现中调用
[super prepareforeuse];

这里的问题是
UITableViewCell
很少得到
dealloc


通常,您需要在子类“
prepareforeuse
方法”中调用
[[NSNotificationCenter defaultCenter]removeObserver:self]
。(请务必在您的实现中调用
[super prepareforeuse];

您需要向我们提供更多有关通知性质的详细信息。您何时注册,何时取消注册?dealloc是否可行?您需要向我们提供更多有关通知性质的详细信息。您何时注册,何时取消注册?dealloc是否可行?我的tableviewcell在开始下载时注册。我想取消注册,如果下载完成(这已经工作),如果细胞滚动出可见屏幕。但是我没有得到关于退出屏幕的信息。不,你不会得到,因为手机会被重复使用。这是错误方法的一个很好的例子。不要在视图中执行此操作,而是在其控制器中执行此操作。重做整个方法并使用控制器,而不是业务逻辑的视图本身。但是如果NotificationCenter检查观察者是否为零,一切都会好起来。我无法跟踪从控制器到有100个单元格要跟踪的单元格的下载和通知。@JeanetteMüller是的,但这不是解决问题的方法。该单元将被重用,因此不会为零。您可以重写prepareForReuse,也可以添加一个自定义方法,该方法在您开始使用一个单元格时调用,而该单元格只是将其注销(以防万一)。my tableviewcell在下载开始时注册。我想取消注册,如果下载完成(这已经工作),如果细胞滚动出可见屏幕。但是我没有得到关于退出屏幕的信息。不,你不会得到,因为手机会被重复使用。这是错误方法的一个很好的例子。不要在视图中执行此操作,而是在其控制器中执行此操作。重做整个方法并使用控制器,而不是业务逻辑的视图本身。但是如果NotificationCenter检查观察者是否为零,一切都会好起来。我无法跟踪从控制器到有100个单元格要跟踪的单元格的下载和通知。@JeanetteMüller是的,但这不是解决问题的方法。该单元将被重用,因此不会为零。您可以重写PravaReFieldE或添加一个自定义方法,每当您使用一个简单地注销它的单元格时(以防万一)。BTW,我同意@ to To的评论,如果您这样做,您可能在杂草中,并且可能想考虑重构,以便在控制器。我同意@的评论,如果你这样做的话,你可能在杂草中,并且可能想考虑重构,以便在控制器中处理。