我有这个代码将核心数据上下文传递给其中一个控制器。 它运行了好几天,直到调试器开始给我“非A类型发布”错误并崩溃应用程序。 我检查了应用程序是否有泄漏,我发现了SappDelegate对象的泄漏。所以我明白我必须释放它,但它每次我都会一直崩溃。
任何想法 谢谢 SHANI
SAppDelegate *hbad= [[SAppDelegate alloc] init];
NSManagedObjectContext *context = [hbad managedObjectContext];
[hbad release];
if (!context) {
NSLog(@"problem with mannaged");
}
self.managedObjectContext = context;
答案 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;
此外,泄漏不会导致崩溃,直到您的应用程序内存不足并且系统将其终止时才会崩溃。