我认为这不是一个常见问题,这使得回答起来有点困难。不过,任何帮助都表示赞赏。
我需要在我的应用程序中多次调用此委托,并且我注意到很多次后,委托开始返回NULL(因此停止响应)。我把一个nslog放在代理被调用的地方,所以我知道在这一点上,没关系:
UIImage *image = [self.delegate largeThumnailForMediaAtIndex:indexPath.row];
然后,下次调用此行时,委托将设置为NULL。它周围没有任何行调用或设置委托。我也在setDelegate方法上放了一个NSLog,并且在更改为NULL之前没有调用它。
您可能需要查看的任何代码,请与我们联系。您希望我尝试的任何想法,也让我知道。
感谢您的帮助。
编辑:奇怪,但可能有助于找到解决方案。我把一个NSTimer scheduledTimer ..放在了让它成为委托的类中,让它每秒触发一次,这样我就可以看到它在任何时候都变为null。然而,我得到的结果是,这次它没有变为空。它返回了所有委托方法。当我拿出计时器时,它会返回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];
我不明白为什么这会有所作为。如果有人知道的话,我很想知道吗?
答案 0 :(得分:3)
看起来你正在使用ARC。无论这个目标是什么,没有任何东西拥有它。没有什么强烈的参考,所以它被释放,然后在某些时候它被解除分配。
JCreateViewController *create = [[JCreateViewController alloc] init];
这是一个局部变量。当变量超出方法末尾的范围时,您将无法再访问该对象。在MRR下,这将是一次泄密。在ARC下,对象将会死亡,就像在自动释放池中一样。
self.create = [[JCreateViewController alloc] init];
通过创建属性(大概是strong
)并将控制器放入该属性,您已经给出了self
对控制器的拥有引用。只要未重新分配属性或将其设置为nil
,它就会生效。
计时器固定的东西,因为计时器保留其目标(我认为是控制器(你的问题相当不清楚)),并且计时器本身由运行循环保留。因此,运行循环使重复计时器保持活动状态,计时器使控制器保持活动状态。
简而言之,确保某些东西拥有这个物体并且它会坚持下去。