【问题标题】:Why does UITableView loses ManagedObjectContext after returning from a ModalView?为什么 UITableView 从 ModalView 返回后会丢失 ManagedObjectContext?
【发布时间】:2011-10-02 08:30:03
【问题描述】:

我已经使用以下内容创建了一个基于窗口的应用程序

  • TableViewController(没有 XIB 文件)
  • ViewController(带有 XIB 文件)
  • 用于存储一些数据的 CoreData 模型

我设法加载应用程序并使用来自实体的数据填充 TableView,并且我能够滚动 TableView 的所有单元格,没有任何问题。

我添加了一个 UIBarButton 项 (rightBarButton),它会显示一个模态视图,供用户输入一些数据。模型视图有一个保存和取消按钮。

问题是,一旦我按下取消按钮,我就会返回 TableView,但如果我尝试滚动浏览 tableview 中的项目,应用程序就会崩溃。

在 Google 和 StackOverflow 搜索 4 小时后,我无法看到我的应用崩溃的原因。然而,我确实注意到调试器在我第二次滚动 tableview 时(在模态视图被关闭后)将 ManagedObjectContext 设置为 NIL,尽管没有更改任何数据,也没有发生插入/删除。

我尝试使用计时器调用 reloadData,因为我在 StackOverflow 上找到了一些答案,但这不起作用。我尝试将 ManagedObjectContext 设置为具有保留并删除所有出现的 [myManagedObjectContext release] 的属性以避免比需要更早地释放它,但这没有帮助。

似乎我犯了一个明显的错误,但我不确定在哪里。

请帮忙。

【问题讨论】:

  • 您是否实现了viewDidUnload 和/或didRecieveMemoryWarning,如果是,您是否在其中的任何位置设置您的self.managedObjectContext = nil;
  • 我实现了 didUnload 但我没有设置 managedobjectcontext=nil 这会导致另一个问题
  • @Paul.s 你是对的,我无意中将托管对象上下文设置为 nil,这是我明显的错误。如果您可以发布答案,我会接受。谢谢。

标签: iphone xcode uitableview core-data ios4


【解决方案1】:

ivars 不会成为nil 只是因为它们是在其他地方发布的(至少在 iOS 4.3 中没有)。所以过度发布并不是myManagedObjectContext变成nil的具体原因。假设您正在使用访问器来引用您的 ivars(并且您应该这样做),请手动实现 setManagedObjectContext: 并在其中放置一个断点以查看谁在调用它。或者,您可以将 gdb 观察点添加到 myManagedObjectContext 以查看内存何时更改。

当您崩溃时,您还没有指出崩溃堆栈是什么。您应该专注于您在崩溃点访问的内存,并确保崩溃是由于内存违规而不是异常造成的。检查您的调试器输出。通常它会告诉你发生了什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    相关资源
    最近更新 更多