2010-06-04 101 views
1

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

任何想法 感谢 SHANI

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

回答

1

如果SAppDelegate为您的实际应用程序的委托,这是无法得到它的正确方法。您应该更改您的代码:

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

此外,泄漏不会造成死机,直到很久以后,当你的应用程序运行的内存和系统杀死它。

+0

喜Elfred应用程序的委托。 完美工作 这是否始终是与应用程序委托进行通信的方式? 我很高兴地告诉你,你刚刚帮我芬兰我的第一个应用程序。 工作很好没有泄漏.. 伟大的一天给你所有 – shannoga 2010-06-04 13:47:14

+0

是的,如果你需要得到一个应用程序委托的实例,那就是这样做。 – Elfred 2010-06-04 14:35:02

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

喜 感谢您的快速回复 1.我必须通过存储在应用程序委托的ManagedObjectContext,这就是为什么即时通讯再次创造它。如果有这样做的话?或者我想知道如何更好的方法。 2.我试过你的建议,但我钢有相同的崩溃日志。 thans再次 SHANI – shannoga 2010-06-04 13:36:26

+0

嗨,Elfred的答案是比我好 - 它展示了如何让已经存在的,而不是使用一个新的:) – deanWombourne 2010-06-04 13:39:03

相关问题