gpt4 book ai didi

objective-c - 将 UITableView 和数据源/委托(delegate)放在单独的类中不起作用 (XCode 4.2)

转载 作者:行者123 更新时间:2023-12-04 03:10:02 26 4
gpt4 key购买 nike

我试图将我的 TableView 的委托(delegate)和数据源放入一个单独的类中。我的问题是它总是毫无错误地崩溃。这就是为什么我无法弄清楚我做错了什么。也许有人可以告诉我。也许我使用 ARC 也很重要。

这就是我的简单代码:

//ViewController.h
@interface ViewController : UIViewController {
UITableView *myTableView;
}

@property (strong, nonatomic) IBOutlet UITableView *myTableView;

@end

//ViewController.m
#import "ViewController.h"
#import "MyTableViewDatasourceDelegate.h"

@implementation ViewController
@synthesize myTableView;

- (void)viewDidLoad
{
[super viewDidLoad];
MyTableViewDatasourceDelegate *test = [[MyTableViewDatasourceDelegate alloc] init];

self.myTableView.delegate = test;
self.myTableView.dataSource = test;
}

@end

//MyTableViewDelegateDatasourceDelegate.h
@interface MyTableViewDatasourceDelegate : NSObject <UITableViewDataSource, UITableViewDelegate>

@end

//MyTableViewDatasourceDelegate.m
@implementation MyTableViewDatasourceDelegate

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
}

cell.textLabel.text = @"Test";
return cell;
}

@end

最佳答案

您似乎没有在其他任何地方引用 test,因此它会在 viewDidLoad 方法结束时自动释放。确保将 test 实现为实例变量,因此至少有一些东西引用了它。

对象不需要是ivar 就可以持久存在。看一下 delegate 属性定义:

@property(nonatomic,assign)   id <UITableViewDelegate>   delegate;

assign 在这里很关键,它意味着这是一个弱引用,UITableView 不会保留这个对象。请注意,如果它说 (nonatomic, retain) 您的代码可以工作,但 Apple 的设计决定以这种方式实现它以避免保留循环。

关于objective-c - 将 UITableView 和数据源/委托(delegate)放在单独的类中不起作用 (XCode 4.2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7705006/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com