4

我有一个现有项目,我想使用 CoreData。

创建项目后,CoreData.framework它已添加到我的Frameworks组下,并且Link Binary With Libraries位于我的项目的目标 -> 构建阶段中。当我创建这个项目时,我没有选中“使用核心数据”——复选框甚至不存在——它只是在我的项目中。我使用 Xcode 版本 4.6.3。

阅读教程后,我去了我的App-Prefix.pch并添加了对 CoreData 的导入。现在看起来像这样:

#import <Availability.h>

#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <CoreData/CoreData.h>
    #import <Foundation/Foundation.h>
#endif

然后,我在我的AppDelegate.h:

@property (readonly, nonatomic, strong) NSManagedObjectContext *managedObjectContext;
@property (readonly, nonatomic, strong) NSManagedObjectModel *managedObjectModel;
@property (readonly, nonatomic, strong) NSPersistentStoreCoordinator *persistentStoreCoordinator;

- (void)saveContext;

现在,当我覆盖 getter for 时managedObjectContext,Xcode 会抛出一个错误:

使用未声明的标识符“_managedObjectContext”;你的意思是“NSManagedObjectContext”吗?

这是我的getter方法AppDelegate.m

- (NSManagedObjectContext *)managedObjectContext {
    if(_managedObjectContext != nil)
        return _managedObjectContext;

    NSPersistentStoreCoordinator* psc = [self persistentStoreCoordinator];

    if(psc != nil)
    {
        _managedObjectContext = [[NSManagedObjectContext alloc] init];
        [_managedObjectContext setPersistentStoreCoordinator:psc];
    }

    return _managedObjectContext;
}

我还尝试将 .pch 文件放在我的 Copy Bundle Resources 中,但无济于事。帮助?

4

2 回答 2

6

您已经正确设置了所有内容(请注意,您不需要将 PCH 添加到 Copy Bundle Resources 构建阶段)。您收到该错误的原因是因为未合成 _managedObjectContext ivar,因为您正在覆盖只读属性上的 getter。您要么需要将属性更改为读写(我不推荐),在类扩展中将属性重新定义为读写,或者在类扩展或实现块中手动定义 ivar。

于 2013-08-08T07:27:36.180 回答
1

对于您甚至实现的只读属性,编译器不会创建任何 Ivar。声明变量

NsmanagedObjectContext *_managedObjectContext;

于 2013-08-08T07:35:18.007 回答