gpt4 book ai didi

iphone - 框架代码将消息发送到已释放的 UITableViewController 对象的错误

转载 作者:行者123 更新时间:2023-12-03 19:58:02 27 4
gpt4 key购买 nike

我正在开发我的第一个 iPhone 应用程序几个月,现在我陷入了内存错误“消息发送到已释放的实例”。我已经写下了我所有的观察结果(来自调试器),但找不到原因。我将非常感谢任何帮助。

情况:

我创建了 pick_ListBrowseController,它是 UITableViewController 的子类。调用它是为了从滚动列表中选择一个项目。所呈现的对象来自 CareData 数据库。我使用NSFetchedResultsController

在pick_ListBrowseController的实现中,有一个典型的方法返回获取的结果 Controller :

- (NSFetchedResultsController *) fetchedResultsController {

// If the fetched results controller already exists, return it:
if (fetchedResultsController != nil) { return fetchedResultsController;}

(…) // constructing fetchRequest object with entity and sort descriptors

[NSFetchedResultsController deleteCacheWithName:@"pick_List"];

// Create fetched request controller:
NSFetchedResultsController *aFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:nil cacheName:@"pick_List"];
// Set the fetched results controller's delegate to self;
// it will send controllerDidChangeContent:
[aFetchedResultsController setDelegate: self];
// Assign this new fetched results controller to the property:
[self setFetchedResultsController: aFetchedResultsController];
// Return fetched request controller:
return fetchedResultsController;
}

错误场景 A:

第 1 步)我调用 pick_ListBrowseController,选择一个项目并返回。视野消失。在调试器中,我可以看到 pick_ListBrowseController 对象的内存地址为 0x729b950

第2步)我再次调用pick_ListBrowseController。现在是另一个实例,内存地址为0x755a4e0

第 3 步)当我尝试选择一个项目时,收到错误消息:

[pick_ListBrowseController controllerDidChangeContent:]: message sent to deallocated instance 0x729b950.

地址来自第1步)!由于某种原因,框架代码(我无法访问)将 controllerDidChangeContent: 发送到步骤 1) 中已释放的对象,而不是发送到步骤 2) 中的对象,这是应该的。

错误场景 B:

更糟糕的是,即使在步骤 1) 中我调用了另一个 Controller 对象(也是 UITableViewController 的子类),也会发生这种情况。步骤 2) 和 3) 保持不变。同样的错误发生了,在调试器中我可以看到,即使现在 controllerDidChangeContent: 也已从步骤 1) 发送到对象。因此,它不仅被发送到错误的(和释放的)对象,甚至被发送到来自不同类的对象!

问题:

1) 可能是什么原因?如何解决?

2) 我的应用程序非常大。是否有可能它变得太大导致上述内存问题?如果是,我该怎么做才能把事情做好?

目前,我使用 Xcode 版本 4.2 build 4C199 并使用自动引用计数 (ARC) - 我经历了“转换为 Objective-C ARC”的重构过程。

任何帮助将不胜感激。

最佳答案

当你的 VC 被释放时,你的 FRC 很可能没有被释放。如果它卡在周围并且有你的 VC 作为对委托(delegate)的引用,那么你就有了一个悬空指针。仔细检查您是否正在清理 FRC。

关于iphone - 框架代码将消息发送到已释放的 UITableViewController 对象的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7957638/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com