Ios Can';t以编程方式设置数据源,获取EXC\u BAD\u访问权限
我试图以编程的方式为我的表视图设置数据源,我创建了一个类,它实现了Ios Can';t以编程方式设置数据源,获取EXC\u BAD\u访问权限,ios,objective-c,uitableview,datasource,Ios,Objective C,Uitableview,Datasource,我试图以编程的方式为我的表视图设置数据源,我创建了一个类,它实现了UITableViewDataSource协议(我不知道implements是否是它的正确名称,对OC来说是新的,我来自Java) @接口控制器:NSObject 在我的ViewController中的viewDidLoad方法中,我试图分配数据源,但我得到了EXC\u BAD\u访问权 [playlview setDataSource:[[playlicontroller alloc]initWithPlaylist:playl
UITableViewDataSource
协议(我不知道implements是否是它的正确名称,对OC来说是新的,我来自Java)
@接口控制器:NSObject
在我的ViewController
中的viewDidLoad
方法中,我试图分配数据源,但我得到了EXC\u BAD\u访问权
[playlview setDataSource:[[playlicontroller alloc]initWithPlaylist:playlist]]代码>
我不知道为什么
通过阅读这里(所以),我了解到这可能是一个强制转换问题(但我确实实现了所需的协议),或者是内存管理问题(但我使用的是ARC,根本不涉及释放)我在任何地方都没有看到UITableView对象集
确保在Nib文件中创建了IBOutlet并链接到UITableView
@interface PlaylistController : NSObject <UITableViewDataSource, UITableViewDelegate>
IBOutlet UITableView* tableView;
@end
Then in your viewDidLoad you can do:
[tableView setDataSource:self]
@接口控制器:NSObject
IBUITableView*表格视图;
@结束
然后在viewDidLoad中,您可以执行以下操作:
[tableView setDataSource:self]
而不是
[playlistView setDataSource:[[PlaylistController alloc] initWithPlaylist:playlist]];
使用
原因:
您试图将DataSource设置为处于自动释放中的实例。它被释放,你就会得到错误
您应该将数据源设置为self
,以便它指向类的当前实例。我正在尝试以编程方式将数据源设置为我的表视图
如何??它应该是我正在尝试以编程方式设置我的表视图的数据源。你是对的,修复了它:)危险@属性(非原子,赋值)id数据源
(注意赋值
)!无论如何,你需要发布一个stacktrace。你不会说你是在使用ARC还是MRR,这不是你马上要面对的问题,但是如果你在使用ARC,那么这样设置数据源就不会保留它(因为属性是assign
),所以它几乎会立即消失。您需要将其分配给视图控制器的实例变量,然后将其设置为数据源。这样做意味着将当前上下文实例(ViewController
)设置为数据源,我不希望更新我的答案。但是,如果扩展UITableViewController而不仅仅是NSObject,您不需要在.h文件中声明UITableView。如果要将其分配给其他类的实例,我应该怎么做?创建一个strong类型的属性,然后将其分配为数据源。将strong属性指定给它与trojanfoe建议的assign属性有什么区别?strong
in ARC meansretain
与assign
或weak
相比,除非所有者将其释放,否则它将在那里。因此,如果我正确地理解了这一点,赋予它assign属性将是错误的。因为ARC将能够在其指定的对象仍在使用时释放它?
[playlistView setDataSource:self];