我的uitableview.delegate被设置为null.有什么想法吗,或者我怎么能弄清楚为什么



我认为这不是一个常见的问题,这使它更难回答。任何帮助我们都将不胜感激。

我需要在我的应用程序中多次调用此委托,我注意到多次之后,该委托开始返回为NULL(因此停止响应)。我在代表被呼叫的任何地方都放了一个nslog,所以我知道在这一点上,它很好:

UIImage *image = [self.delegate largeThumnailForMediaAtIndex:indexPath.row];

然后,下次调用此行时,委托将设置为NULL。它周围没有行调用或设置代理。我在setDelegate方法上也放了一个NSLog,在它变为NULL之前没有被调用。

任何您可能需要查看的代码,请告诉我。任何你想让我尝试的想法,也让我知道。

谢谢你的帮助。

编辑:奇怪,但可能有助于找到解决方案。我设置了NSTimer scheduledTimer。。在成为委托的类中,并让它每秒激发一次,这样我就可以看到它是否在任何时候变为空。然而,我得到的结果是,这一次它没有变为空。它返回了所有的委托方法。当我把计时器取出来时,它会返回NULL。显然,有一个计时器是一个奇怪的变通办法"解决方案"。我希望这能给某人敲响警钟,让他们知道问题可能在哪里?

第2版:我解决了这个问题,而不是在我的AppDelegate:中使用这个代码

JCreateViewController *create = [[JCreateViewController alloc] init];
    [create.navigationBar addLeftButtonWithTitle:@"Back" type:JButtonTypeArrow];
   create.navigationBar.title = @"Entry #17";
    [self.window addSubview:create.view];

在我的头文件中声明它,然后使用这个:

self.create = [[JCreateViewController alloc] init];
    [self.create.navigationBar addLeftButtonWithTitle:@"Back" type:JButtonTypeArrow];
    self.create.navigationBar.title = @"Entry #17";
    [self.window addSubview:self.create.view];

我不明白为什么这会有什么不同。我很想知道,如果有人知道的话?

看起来你在使用ARC。无论这个对象是什么,都没有任何东西拥有它。没有任何东西对它有强引用,所以它被释放,然后在某个时候被释放。

JCreateViewController *create = [[JCreateViewController alloc] init];

这是一个局部变量。当变量在方法结束时超出范围时,您将无法再访问该对象。根据MRR,这将是一次泄漏。在ARC下,对象将死亡,就像它在自动释放池中一样。

self.create = [[JCreateViewController alloc] init];

通过创建一个属性(大概是strong)并将控制器放入该属性中,您已经为控制器提供了self的所有权引用。只要属性没有重新分配或设置为nil,它就会一直存在。

计时器修复了一些问题,因为计时器保留了它的目标(我认为它是控制器(你的问题很不清楚)),并且计时器本身由运行循环保留。因此,运行循环使重复计时器保持活动状态,计时器使控制器保持活动状态。

简而言之,确保某个东西拥有这个对象,它就会一直存在。

相关内容

最新更新