将 Core Data 添加到现有 Xcode 项目时出现未声明的标识符错误

Posted

技术标签:

【中文标题】将 Core Data 添加到现有 Xcode 项目时出现未声明的标识符错误【英文标题】:Undeclared identifier error when adding Core Data to existing Xcode project 【发布时间】:2013-08-08 07:21:22 【问题描述】:

我有一个现有项目,我想使用 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;

现在,当我覆盖 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 文件放入我的 Copy Bundle Resources 中,但无济于事。帮忙?

【问题讨论】:

【参考方案1】:

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

【讨论】:

... 或添加@synthesize managedObjectContext = _managedObjectContext; 以显式合成属性。 ^我实际上尝试过使用这种方法,但它没有工作在我重新启动 Xcode 之前。现在我有了,它可以工作了。而是这样做。不过,在 Tyler 的建议中,我最喜欢在类扩展中将属性重新定义为 readwrite。【参考方案2】:

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

NsmanagedObjectContext *_managedObjectContext;

【讨论】:

以上是关于将 Core Data 添加到现有 Xcode 项目时出现未声明的标识符错误的主要内容,如果未能解决你的问题,请参考以下文章

从现有 XSD 创建托管对象模型 - iPhone Core Data

将 cocoapods 添加到现有项目

将对象添加到 NSSet 时与 Core Data 的反比关系导致崩溃

Xcode Entity Core Data - NSDate 错误的年份? [复制]

ios/xcode/core data:更新屏幕的最佳方式

将单元和 UI 测试添加到 Xcode 中的现有项目