0

Core Data の仕組みを学ぼうとしています。そこで、属性を持つエンティティを作成し、エンティティの xcdatamodel ファイルと .h および .m ファイルを取得しました。偉大な。

また、エンティティにデータを追加するために、アプリ デリゲートに次のコードを記述しました。

TestEntity *newEntity = [NSEntityDescription 
                         insertNewObjectForEntityForName:@"TestEntity" 
                         inManagedObjectContext:self.managedObjectContext];

newEntity.entityName = @"temp";

    NSError *savingError = nil;
    if([self.managedObjectContext save:&savingError]){
        NSLog(@"Success");

    }
    else{
        NSLog(@"Fail");
    }

ここまでは順調ですね。しかし今、メインのView Controllerでこのデータ、つまりentityNameにアクセスしたいと考えています。これは私が迷っているところです。ソースコードのサンプルを読んだところ、ほとんどの人は次のように言っています

NSError *requestError = nil;
NSFetchRequest *fetchrequest = [[NSFetchRequest alloc] initWithEntityName: @"TestEntity"];
NSArray *entities = [self.managedObjectContext executeFetchRequest: fetchrequest error:&requestError]; 

これにより、TestEntity オブジェクトでいっぱいのエンティティと呼ばれる配列が得られます。ということで、名前にアクセスできるはずentities.entityNameです。

しかし、managedobjectcontext はこのビュー コントローラーのプロパティではないというエラーが表示されます。それは私には理にかなっていますが、これに対する解決策が何であるかわかりませんか? コアデータを使用したい各クラスに必要なコアデータのプロパティ/メソッドを実装する必要がありますか?

4

2 に答える 2

0

これは実際には Core Data に関する質問ではなく、基本的な Objective-C に関する質問です。を使用するにはself.managedObjectContextselfは と呼ばれるインスタンス変数 (つまり、最新の ObjC のプロパティ) を持つクラスのインスタンスである必要がありますmanagedObjectContextまた、使用する場合は、そのプロパティに値を割り当てる必要があります。

プロパティの追加は簡単です。適切な型 (ここでは an ) のプロパティとしてクラスで宣言するだけNSManagedObjectContextです。値の割り当ては、プロジェクトの全体的な構造によって異なります。Xcode のプロジェクト テンプレートでは、アプリ デリゲートがマネージド オブジェクト コンテキストを作成します。通常、アプリ デリゲートには、1 つ以上のビュー コントローラーへの参照もあります。この共通構造を使用している場合、アプリ デリゲートのどこかからビュー コントローラーのマネージド オブジェクト コンテキスト プロパティを割り当てる 1 つの方法。に似たもの

self.mainViewController.managedObjectContext = self.managedObjectContext;

アプリのアーキテクチャが異なる場合は、別のことを行う必要がありますが、それはアプリの詳細によって異なります。

于 2013-11-11T17:06:16.723 に答える
0

AppDelegate を参照する必要があります。次のようにします。

AppDelegate *del = [[UIApplication sharedApplication] delegate];
self.managedObjectContext = del.managedObjectContext;
NSError *requestError = nil;
NSFetchRequest *fetchrequest = [[NSFetchRequest alloc] initWithEntityName: @"TestEntity"];
NSArray *entities = [self.managedObjectContext executeFetchRequest: fetchrequest error:&requestError];
于 2013-11-11T17:08:21.840 に答える