2016-03-13 3 views
0

У меня есть UITableView в моем приложении, и я пытаюсь вытащить его методы делегата в отдельный UITableViewDelegate. Это то, что код выглядит следующим образом:Сложность пытается реализовать отдельный 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

Опубликовать больше кода. Что делает didSelectRowAtIndexPath? –

ответ

1

Это очень интересная проблема. Помните, что в ARC (автоматический подсчет ссылок) объект будет сохранен только до тех пор, пока поддерживается его сильная ссылка на него. Помните, что «делегат всегда слаб, и в вашем случае это означает, что после того, как вы выходите из области действия, где вы создаете объект-делегат и настраиваете представление таблицы, больше не будет делегировать объект-делегат. Именно по этой причине вы можете не видеть ничего, когда пытаетесь перезагрузить представление таблицы. Сделайте объект делегата RestaurantViewDelegate членом вашего контроллера. И проверьте ..

+0

Также убедитесь, что вы держите ссылку «strong» на этом делетете в своем контроллере. Другое дело, что ваша ячейка не настроена для хранения каких-либо данных. Вы просто возвращаете ячейку представления таблицы по умолчанию. Вы настраиваете содержимое ячейки где-нибудь? –

Смежные вопросы