2011-12-02 7 views
10

に失敗した私は1つのエントリでUserModel.xcdatamodeldを作成:ユーザーベース、と私は名前がユーザーIDとタイプである属性を追加した後整数32XCodeの4.2 NSManagedObjectコンテキストビルドが

で、私は、ファイルとそれのためのクラスを作成します - >新しいファイル - > 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..."); 

プロジェクトをビルドしようとすると、 rror:

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を追加してみてください。 – rjstelling

+0

それは動作します。ありがとう... – mudlee

答えて

20

未定義のシンボルを通常いくつかのフレームワークが欠落していることを意味します。フレームワークは、アプリケーションで使用できるプリコンパイルされたクラスのライブラリです。

XCodeの4のフレームワークを追加するには:あなたのプロジェクトのルート上の

  1. クリック(青写真アイコンと左上隅の項目)。
  2. ターゲットをクリックします(通常、左の「鉛筆で作成されたアイコン」と同じアプリケーション名)。
  3. 上部の[概要]タブをクリックしてから、下にスクロールしてディバイダを折りたたみ、[iPad Deployment Info]の下に[Linked Frameworks and Libraries]セクションがあります(図1を参照)。
  4. そのリストの下部にある[+]ボタンをクリックします。
  5. ポップアップでフレームワークを選択して検索し、そのフレームワークを選択したら[追加]をクリックします。

そして、それだけです!そのフレームワークに含まれるクラスは、正しい#importを実行している限り、コード上で利用可能になります。

図1:

enter image description here

プロジェクトを維持するためには、私はグループの「フレームワーク」に新しく追加されたフレームワークをドラッグすることをお勧めします、注文しました。

+3

また、 "pch"ファイルに '#import 'を追加してください – refaelos

3

アラートファイルをプロジェクトにインポートした場合は、ターゲットメンバーシップにチェックマークを付けてください。私は同じ問題を抱えていて、ボックスをチェックしてエラーが消えてしまった!

0

プロジェクトからNSManagedObjectクラスを削除して、再度生成してください。それは私を助けた;)