应用程序在发布appDelegate实例时崩溃

时间:2010-06-04 13:24:35

标签: iphone

我有这个代码将核心数据上下文传递给其中一个控制器。 它运行了好几天,直到调试器开始给我“非A类型发布”错误并崩溃应用程序。 我检查了应用程序是否有泄漏,我发现了SappDelegate对象的泄漏。所以我明白我必须释放它,但它每次我都会一直崩溃。

任何想法 谢谢 SHANI

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

2 个答案:

答案 0 :(得分:1)

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

您应该看到Elfred's answer来获取应用委托,而不是创建一个。


但是,您发布的代码中有一个错误。 。

您需要保留上下文,直到完成它为止。要么:

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];

答案 1 :(得分:1)

如果SAppDelegate是您的实际应用代理,那么这不是获取它的正确方法。您应该将代码更改为:

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

此外,泄漏不会导致崩溃,直到您的应用程序内存不足并且系统将其终止时才会崩溃。