iphone - 应用程序在释放appDelegate实例时崩溃

  显示原文与译文双语对照的内容
0 0

我有一个代码把核心数据上下文传递给一个控制器。 它工作得很好几天,直到调试器开始给我"不是类型发布"错误并破坏应用程序。 我检查了应用程序的漏洞,发现SappDelegate对象有漏洞。 我明白我必须释放它,但每次我做它都会崩溃。

感谢 shani

SAppDelegate *hbad= [[SAppDelegate alloc] init];
NSManagedObjectContext *context = [hbad managedObjectContext];
[hbad release];
if (!context) {
 NSLog(@"problem with mannaged");
}
self.managedObjectContext = context;
时间:原作者:2个回答

0 0

如果SAppDelegate是实际的App Delegate,那就不正确了。 你应该将代码更改为:

SAppDelegate *hbad= [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [hbad managedObjectContext];
if (!context) {
 NSLog(@"problem with mannaged");
}
self.managedObjectContext = context;

这里外,当你的应用程序超出内存并且系统杀死它时,泄漏将不会导致崩溃。

原作者:
0 0

我不完全确定你为什么要创建一个新的SAppDelegate 。 你应该只有其中一个,它会在启动时为你创建。 为什么需要另一个SAppDelegate实例?

你应该看到的elfred答案,以获得而不是创建一个。


但是,在你所发布的代码中有一个 Bug 。 ..

你需要保持上下文,直到完成它为止。 其中之一:

SAppDelegate *hbad= [[SAppDelegate alloc] init];
NSManagedObjectContext *context = [[hbad managedObjectContext] retain];
[hbad release];
if (!context) {
 NSLog(@"problem with mannaged");
}
self.managedObjectContext = context;
[context release];

或者稍后释放 hbad:

SAppDelegate *hbad= [[SAppDelegate alloc] init];
NSManagedObjectContext *context = [hbad managedObjectContext];
if (!context) {
 NSLog(@"problem with mannaged");
}
self.managedObjectContext = context;
[hbad release];
原作者:
...