难以尝试实现单独的UITableViewDelegate

时间:2016-03-13 22:08:33

标签: ios objective-c uitableview

我的应用中有UITableView,我试图将其委托方法拉入单独的UITableViewDelegate。这就是代码的样子:

RestaurantViewDelegate *delegate = [[RestaurantViewDelegate alloc] initWithRestaurant:self.restaurant andRecommended:self.recommended];

self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 235.0f, self.view.frame.size.width, self.view.frame.size.height-235)];
self.tableView.delegate = delegate;
self.tableView.dataSource = delegate;
[self.view addSubview:self.tableView];

这就是RestaurantViewDelegate的样子:

// RestaurantViewDelegate.h

@interface RestaurantViewDelegate : NSObject <UITableViewDelegate>

@property (nonatomic, strong) NSArray *recommendations;
@property (nonatomic, strong) Restaurant *restaurant;

- (id)initWith Restaurant:(Restaurant *)restaurant andRecommended:(NSArray *)recommendations;

@end

// RestaurantViewDelegate.m

@implementation RestaurantViewDelegate

@synthesize recommendations = _recommendations;
@synthesize restaurant = _restaurant;

- (id)initWith Restaurant:(Restaurant *)restaurant andRecommended:(NSArray *)recommendations {

    self = [super init];
    if ( self != nil ) {

        _recommendations = recommendations;
        _restaurant = restaurant;
    }
    return self;
}

#pragma mark - UITableViewDataSource

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSLog(@"Recommendations: %d", [_recommendations count]);
    return [_recommendations count];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 48.0f;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *MyIdentifier = @"MyIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier];
    }

    return cell;
}

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

@end

然而,当我运行我的应用程序并单击一个单元格时,所有单元格都会消失。我真的不知道造成这种情况的原因。关于我做错了什么的任何想法?

1 个答案:

答案 0 :(得分:1)

这是一个非常有趣的问题。请记住,在ARC(自动引用计数)中,只有保留对它的强引用,才会保留对象。请记住,'委托总是很弱,在你的情况下,这意味着,一旦你走出范围,你创建委托对象和设置表视图,将不再保留任何委托对象。这是您尝试重新加载表视图时可能看不到任何事情的原因。使委托对象RestaurantViewDelegate成为控制器的成员。并检查..