在向现有Xcode项目中添加Core Data时出现未声明标识符错误

4
我有一个现有的项目,想要使用CoreData。
在创建项目时,CoreData.framework已经添加到了我的Frameworks组中,并且它位于我的项目的目标 -> 构建阶段下的Link Binary With Libraries中。在创建此项目时,我没有勾选“使用Core Data”--甚至连复选框都没有--它只是简单地存在于我的项目中。我使用的是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;

现在,当我重写managedObjectContext的getter方法时,Xcode会抛出错误:

使用了未声明的标识符'_managedObjectContext',你是想使用 'NSManagedObjectContext' 吗?

这是我在AppDelegate.m中的getter方法:

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

    NSPersistentStoreCoordinator* psc = [self persistentStoreCoordinator];

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

    return _managedObjectContext;
}

我也尝试将.pch文件放在我的复制包资源中,但没有成功。有帮助吗?
2个回答

6

您已经正确设置了一切(请注意,您不需要将PCH添加到Copy Bundle Resources构建阶段)。您收到该错误的原因是_managedObjectContext变量没有被合成,因为您正在覆盖只读属性的getter。您需要将属性更改为可读写(我建议不要这样做),在类扩展中重新定义属性为可读写,或在类扩展或实现块中手动定义ivar。


2
或者显式地添加@synthesize managedObjectContext = _managedObjectContext;来合成属性。 - Martin R
我其实尝试过那种方法,但在我重启 Xcode 之前它并没有起作用。现在我重启了之后,它可以正常工作了。我更喜欢 Tyler 提出的建议中,在类扩展中重新定义属性为可读写。 - Matthew Quiros

1

对于只读属性,即使你实现了它,编译器也不会创建ivar。

声明变量

NsmanagedObjectContext *_managedObjectContext;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接