XCode 4.2中NSManagedObject上下文构建失败。

10

我创建了一个名为UserModel.xcdatamodeld的数据模型,其中只有一个Entry:UserBase,并添加了一个名为UserID、类型为Integer 32的属性。

之后,我使用文件->新建文件->NSManagedObject子类为其创建了类,自动生成了UserBase.h和.m文件。

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

NSManagedObjectContext *userBaseObjectContext;

使用

@property (nonatomic, retain) NSManagedObjectContext *userBaseObjectContext;

在我的controller.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/


3
尝试添加CoreData.framework。 - Richard Stelling
3个回答

20

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

在XCode 4上添加框架:

  1. 点击项目的根目录(位于左上角,具有蓝图标)。
  2. 点击目标(通常是相同的应用程序名称,带有左侧笔划“A”的图标)。
  3. 点击顶部的“摘要”选项卡,然后向下滚动...折叠分隔符,在“iPad部署信息”下找到“链接的框架和库”部分(见下图1)。
  4. 单击该列表底部的“+”按钮。
  5. 弹出窗口将要求您选择一个框架,请搜索并选择它,然后单击添加。

这就是全部!只要正确导入 #import,该框架中包含的类将在您的代码中可用。

图1:

enter image description here

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


3
同时... 在你的 "pch" 文件中添加 #import <CoreData/CoreData.h>。 (注:pch 是预编译头文件,用于加速编译过程。这里建议将 Core Data 的头文件引入到该文件中以便整个项目可以访问 Core Data 的框架。) - refaelos

3
如果您将警报文件导入到项目中,请确保在“目标成员资格”上勾选了复选框!我曾经遇到过同样的问题,勾选了该框后错误消失了!

0
尝试从项目中删除您的NSManagedObject类并重新生成它。这对我有帮助;)

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