在自定义UITableViewCell内部释放ViewController

时间:2015-01-20 08:57:32

标签: ios objective-c uitableview

我的代码结构如下:

UITableViewController(有一个或多个) - >自定义UITableviewCell(添加视图) - > UIViewController

现在,要将UIViewController上的操作通知给UITableViewController,我的协议遵循之前解释的逆流,但是,当我对UIViewController执行某项操作时,app崩溃,因为我试图访问一个解除分配的实例......

我以肮脏的方式避免UIViewController上的IBAction崩溃:将UIViewController中的属性设置为self

我怎样才能解决这个漏洞?这是我的代码:

的UITableViewController:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    GameTableViewCell *cell;

    cell = [tableView dequeueReusableCellWithIdentifier: CellId];
    [cell configureWithGame: currentGame];

    cell.delegate = self;
    return cell;
}

自定义TableViewCell:

-(void)configureWithGame:(Game *)game
{
    outcomeController = [[OutcomeViewController alloc] initWithGame:game];
    outcomeController.delegate = self;

    activeGame = game;

    //Adapting outcomeView
    CGRect frame = outcomeController.view.frame;
    frame.size = self.outcomeView.frame.size;
    outcomeController.view.frame = frame;
    [[self.outcomeView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
    [self.outcomeView addSubview:outcomeController.view];
}

OutcomeViewController有一个属性@property (nonatomic, strong) id forceRetain;,它以这种方式设置在-(void)viewDidLoad中:

self.forceRetain = self;

这会导致一些泄漏,我想解决这个问题。

1 个答案:

答案 0 :(得分:0)

尝试在您的手机代码中将outcomeController属性设置为strong

此外,使用您发布的代码,每次滚动OutcomeViewController时都会分配UITableView。这是你想要的行为吗?