为啥我在这段代码中得到“未知类型名称 NSManagedObjectContext”?

Posted

技术标签:

【中文标题】为啥我在这段代码中得到“未知类型名称 NSManagedObjectContext”?【英文标题】:why am I getting an "unknown type name NSManagedObjectContext" in this code?为什么我在这段代码中得到“未知类型名称 NSManagedObjectContext”? 【发布时间】:2011-03-30 07:19:32 【问题描述】:

任何想法为什么我在此代码中得到“未知类型名称 NSManagedObjectContext”?

我基本上是将核心数据添加到现有项目中。我已经添加了 coredata 行 + 我已将 CoreData.framework 添加到项目中。为此,我去了:

何时应用目标 构建阶段 将二进制文件与库链接 然后添加了 CoreData 框架 然后将其拖到项目导航器上,使其与 Xcode 中的其他框架图标一起出现

注意确定我还需要做什么? CoreDataBooks 示例代码看起来与我所编译的几乎相同

#import <UIKit/UIKit.h>

@interface myAppAppDelegate : NSObject <UIApplicationDelegate> 
    UIWindow *window;
    UINavigationController *navigationController;


@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;

// Core Data
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;  // ERROR: unknown type
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;   // ERROR: unknown type
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;   // ERROR: unknown type

- (void)saveContext;
- (NSURL *)applicationDocumentsDirectory;

@end

【问题讨论】:

***.com/questions/4101384/… 【参考方案1】:

然后您必须将 Core Data 框架头文件导入到任何使用 Core Data 类的文件中。

#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>

【讨论】:

哦 - 我回到了 XCode 4 为基于 CoreData 窗口的 iPhone 应用程序创建的模板,看看,虽然没有你建议的导入,但有这个“#ifdef OBJC" project-Prefix.pch 文件中的部分,其中确实包含 CoreData 导入语句 像 Greg 提到的那样将声明放在 project-Prefix.pch 文件中,我认为是更好的方法。 记得在项目 Build Phases 中添加 CoreData 框架。【参考方案2】:

正如 Greg 上面所说,XCode 4 处理此问题的方式是将 #import &lt;CoreData/CoreData.h&gt; 添加到我在 Other Sources 文件夹/组中找到的 [projectname]_Prefix.pch 文件中。

【讨论】:

-1 这是最糟糕的做法。仅在您需要的地方包含标题,而不是在任何地方。可惜苹果开箱即用地提供了这个前缀头。它的正确用途是缩短编译时间......而不是隐藏依赖关系。

以上是关于为啥我在这段代码中得到“未知类型名称 NSManagedObjectContext”?的主要内容,如果未能解决你的问题,请参考以下文章

为啥垂直对齐:中间;在这段代码中不起作用? [复制]

为啥在这段代码中 CPU 运行速度比 GPU 快?

为啥在这段代码中向量比指针使用更少的内存?

React Native datetimepicker 问题。在这段代码中为啥 Platform.OS==='ios'?true:false?

为啥 view2 没有出现在这段代码中? (将 UIView 2 合并到 UIView 1 中)

为啥这段代码会打印出无穷大的数字? [关闭]