代码之家  ›  专栏  ›  技术社区  ›  Collin Allen

在接口生成器中创建的对象过早解除锁定

  •  0
  • Collin Allen  · 技术社区  · 14 年前

    项目

    我正在研究一个相对简单的基于导航控制器的iphone操作系统项目,它有一个根表视图和一个细节表视图。点击主列表中的某个项目,在推送表视图中查看其详细信息。

    设置

    我将两个视图的数据源分解为它们自己的对象,以免混淆视图控制器的用途。完成此操作后,表视图不再有数据源,因为这些方法现在位于单独的文件中,所以我在适当的xib文件中创建了每个数据源类的实例,其中包含对象项(将其拖入,然后设置其类)。然后,为了将tableview实际连接到它们的数据源,我在interface builder中将每个tableview的数据源出口设置为黄色的数据源对象。表视图代理仍设置为其视图控制器。

    问题

    根表视图工作得很好,但是当您点击一行以推送到详细视图时,数据源对象将按预期实例化,然后立即解除锁定,从而导致崩溃(numberOfSectionsTableView:对已释放的对象调用)。我不明白为什么数据源在我需要的时候会被自动释放 就在那时那里 对于详细视图,如接口生成器中的数据源对象创建和TableView连接所示。更令人费解的是,这种方法对根tableview非常有效!

    问题

    有没有什么明显的我遗漏的东西会导致这一切的发生?或者,这是为表视图控制器实例化数据源的正确方法吗?从 看法 控制器,它应该只与视图有关。我可以把所有东西都塞进两个表视图控制器类中,它可能会工作,但不会像我希望的那样模块化。

    谢谢!

    1 回复  |  直到 14 年前
        1
  •  1
  •   Kevin Sylvestre    14 年前

    详细表视图控制器数据源的属性是什么样的?你在叫留用吗?问题可能在于:

    @property (nonatomic, assign) IBOutlet id <UITableViewDataSource> dataSource
    

    而不是:

    @property (nonatomic, retain) IBOutlet id <UITableViewDataSource> dataSource
    
    推荐文章