我的应用中有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
然而,当我运行我的应用程序并单击一个单元格时,所有单元格都会消失。我真的不知道造成这种情况的原因。关于我做错了什么的任何想法?
答案 0 :(得分:1)
这是一个非常有趣的问题。请记住,在ARC(自动引用计数)中,只有保留对它的强引用,才会保留对象。请记住,'委托总是很弱,在你的情况下,这意味着,一旦你走出范围,你创建委托对象和设置表视图,将不再保留任何委托对象。这是您尝试重新加载表视图时可能看不到任何事情的原因。使委托对象RestaurantViewDelegate成为控制器的成员。并检查..