0

我意识到最佳实践是从应用程序中的第一个控制器向下传递对象上下文,但考虑到我的应用程序以导航控制器开始并且有一些视图控制器只是内容并且不需要核心数据,我认为这将是一个更简单的解决方案。

标题:

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

@interface CoreDataViewController : UIViewController
- (void)saveContext;

//See ggfela's answer
//@property (readonly, strong, nonatomic) AppDelegate *appDelegate;
//@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;

@property (readonly, weak, nonatomic) AppDelegate *appDelegate;
@property (readonly, weak, nonatomic) NSManagedObjectContext *managedObjectContext;

@end

执行:

#import "CoreDataViewController.h"

@implementation CoreDataViewController

@synthesize appDelegate = _appDelegate;
@synthesize managedObjectContext = _managedObjectContext;

-(AppDelegate *)appDelegate
{
    if(!_appDelegate) {
        _appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    }

    return _appDelegate;
}

-(NSManagedObjectContext *)managedObjectContext
{
    if(!_managedObjectContext) {
        _managedObjectContext = self.appDelegate.managedObjectContext;
    }

    return _managedObjectContext;
}

- (void)saveContext
{
    [self.appDelegate saveContext];
}

@end

当我从此类继承然后尝试访问托管对象上下文时,我收到一个 SIGABRT 错误,我收集到这意味着某处可能存在内存泄漏。我对 Objective-C 很陌生,所以对调试它不太了解。

谁能告诉我我做错了什么。

我是否真的应该以另一种方式来做(即从控制器传递上下文到子控制器),结果苹果可能会阻止我的应用程序吗?

4

1 回答 1

1

您不应该使用 strong 属性,因为在 setter 上应用了 strong 并且您有一个只读属性。

于 2012-04-24T11:02:45.833 回答