XCode 4.2 NSManagedObject 上下文构建失败

Posted

技术标签:

【中文标题】XCode 4.2 NSManagedObject 上下文构建失败【英文标题】:XCode 4.2 NSManagedObject context build failed 【发布时间】:2011-12-02 16:28:03 【问题描述】:

我创建了一个带有一个条目的 UserModel.xcdatamodeld:UserBase,并添加了一个名称为 UserID 且类型为 Integer 32 的属性。

之后,我使用 file->new file->NSManagedOBject 子类为其创建类,它会自动创建 UserBase.h 和 .m。

在我的控制器中导入 UserBase.h 文件,并创建一个属性:

NSManagedObjectContext *userBaseObjectContext;

@property (nonatomic, retain) NSManagedObjectContext *userBaseObjectContext;

在 mycontroller.m 文件中合成了 userBaseObjectContext 属性,在 DidLoad 函数中我尝试了这个:

UserBase *userObject=(UserBase *)[NSEntityDescription insertNewObjectForEntityForName:@"UserBase" inManagedObjectContext:userBaseObjectContext];
        [userObject setUserID:[NSNumber numberWithInt:42]];
        NSError *error;
        if(![userBaseObjectContext save:&error])
        
            UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Application error" message:@"error" delegate:nil cancelButtonTitle:@"Close" otherButtonTitles:nil,nil];
            [alert show];
            [alert release];
        
        else
            NSLog(@"not working...");

当我尝试构建我的项目时,我收到了这个错误:

Undefined symbols for architecture i386:
 "_OBJC_CLASS_$_NSEntityDescription", referenced from:
  objc-class-ref in LoginController.o
 "_OBJC_METACLASS_$_NSManagedObject", referenced from:
  _OBJC_METACLASS_$_UserBase in UserBase.o
 "_OBJC_CLASS_$_NSManagedObject", referenced from:
  _OBJC_CLASS_$_UserBase in UserBase.o
 ld: symbol(s) not found for architecture i386
 clang: error: linker command failed with exit code 1 (use -v to see invocation)

这是什么意思?

我遵循了这个教程:http://mobile.tutsplus.com/tutorials/iphone/iphone-core-data/

【问题讨论】:

尝试添加 CoreData.framework。 【参考方案1】:

未定义的符号通常意味着缺少某些框架。框架是您可以在应用程序上使用的预编译类库。

在 XCode 4 上添加框架:

    单击项目的根目录(左上角带有蓝图图标的项目)。 点击您的目标(通常是相同的应用名称,左侧带有“由铅笔制成的图标”)。 单击顶部的“摘要”选项卡,然后向下滚动...折叠分隔线,在“iPad 部署信息”下,您将找到“链接的框架和库”部分(参见下面的图 1)。李> 点击该列表底部的“+”按钮。 一个弹出窗口会要求您选择一个框架,搜索它,当您选择它时,单击添加。

而且,就是这样!只要您执行正确的#import,该框架中包含的类将在您的代码中可用。

图一:

为了保持您的项目有序,我建议将新添加的框架拖到“框架”组中。

【讨论】:

另外...在“pch”文件中添加#import <CoreData/CoreData.h>【参考方案2】:

如果您将警报文件导入到您的项目中,请确保选中 Target Membership 上的复选框!我遇到了同样的问题,在我勾选框后错误消失了!

【讨论】:

【参考方案3】:

尝试从项目中删除您的 NSManagedObject 类并再次生成它。它帮助了我;)

【讨论】:

以上是关于XCode 4.2 NSManagedObject 上下文构建失败的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 和核心数据 - “创建 NSManagedObject 子类”

XCode4 无法正确生成 NSManagedObject 子类

Xcode 8.0 NSManagedObject 子类模板在哪里

xCode 8 会自动更新 NSManagedObject,是吗?

NSManagedObject 验证和子类

swift 3 Xcode 8 中的 NSManagedObject 和 CoreData