Ios 设置(自定义)委托运行到无限循环中

Ios 设置(自定义)委托运行到无限循环中,ios,objective-c,Ios,Objective C,我试图编写一个用于显示多个选择列表的简单自定义委托(参考了各种在线教程,stackoverflow,Apple doc),但在我想要使用委托的类中,我设置委托的行在运行时会进入无限循环 我在这里分享了源代码 UIListViewController(其中我声明了协议) 我正试图在名为View\u Exporter的UIViewController中使用委托 #import <UIKit/UIKit.h> #import "UIListViewController.h" @int

我试图编写一个用于显示多个选择列表的简单自定义委托(参考了各种在线教程,stackoverflow,Apple doc),但在我想要使用委托的类中,我设置委托的行在运行时会进入无限循环

我在这里分享了源代码

UIListViewController(其中我声明了协议)

我正试图在名为View\u Exporter的UIViewController中使用委托

#import <UIKit/UIKit.h>
#import "UIListViewController.h"

@interface View_Exporter : UIViewController <UIListViewDelegate, UIListViewDataSource>

  @property (nonatomic, strong) IBOutlet UIView *viewForList; 
  @property (nonatomic, strong) UIListViewController *listViewController;

@end
但是当我运行代码时,viewDidLoad中的这一行似乎无限循环:

self.listViewController.listViewDelegate = self;

为什么会无限循环?从昨天起,我就因为这个伤了头。不知道我哪里出了问题。有人可以帮忙吗?

您已经为
listViewDelegate
编写了一个自定义setter,在该方法的末尾,您可以执行以下操作:

self.listViewDelegate = delegate;
这只是再次调用setter方法。通过
self.
访问属性只是调用
[self-setXX:xxx]
的一种方式。在访问器方法中,您需要直接设置实例变量,在正常情况下,这只是

_delegate = delegate;

(将自动为您创建_delegate实例变量)。您可以安全地删除所有合成语句,不再需要它们

如果代码处于无限循环中,请使用调试器的暂停按钮或断点停止它,然后逐步遍历代码以查看发生了什么。你不能用UI来命名你自己的类,这是苹果公司保留的前缀,你可能会与私有API冲突。让我用调试器@jrturton检查一下!谢谢你的评论。你说的有道理-我会更改UI前缀。非常感谢,@jrturton!它起作用了!我没有意识到self.listViewDelegate=delegate之间的区别;和_delegate=delegate;!&我完全忘记了我已经明确地添加了setter!再次感谢!
_delegate = delegate;