2010-11-27 4 views
0

標準の初心者質問です。私は、iOSアプリケーション用のデータモデルを作成しました。 NSEntityDescriptionオブジェクトを使用して、さまざまなビューからモデル内のエンティティを作成、更新、削除することができます。コアデータと生成モデルエンティティ

フェッチ要求から返されたオブジェクトの可変配列があったとします。エンティティモデルから生成されたオブジェクト定義を持っていないときに、それぞれをどのようにループすることができますか?生成されたオブジェクト定義とは、データモデルパッケージに記述されているエンティティのヘッダとボディクラスの定義を意味します。

答えて

0

すべてのCoreDataエンティティはNSManagedObjectから派生し、それらのすべてのデータベースデータはキー値エンコーディングでアクセスできます。あなたが知る必要がある最小限は、モデルから得ることができます。ヘッダーは必ずしも必要ではありません。

例えばエンティティは、属性FIRSTNAME

NSArray *results = [managedObjectContext queryEntityForName:@"PersonEntity" predicateFormat:nil argumentArray:nil]; 

for(NSManagedObject *object in results) 
{ 
NSString *name = [object valueForKeyPath:@"nameobject.firstname"; 
[self doSomething:name]; 
} 

queryEntityForNameとNameEntityに関係を持っているPersonEntityは、私自身のカテゴリです。それが役に立つかもしれません。

@implementation NSManagedObjectContext(VMQueryAdditions) 

-(NSArray *)queryEntityForName:(NSString *)name predicateFormat:(NSString *)pstring argumentArray:(NSArray *)arr 
{ 
    NSEntityDescription *entity = [NSEntityDescription entityForName:name inManagedObjectContext:self]; 
    NSFetchRequest *fetch = [[[NSFetchRequest alloc] init] autorelease]; 

    [fetch setEntity:entity]; 
    NSPredicate *pred; 

    if(pstring) 
    { 
     if(arr) pred = [NSPredicate predicateWithFormat:pstring argumentArray:arr]; 
     else pred = [NSPredicate predicateWithFormat:pstring]; 
     [fetch setPredicate:pred]; 
    } 

    NSError *error = nil; 

    NSArray *results = [self executeFetchRequest:fetch error:&error]; 

    if (error) { 
     NSLog(@"MOC Fetch - Unresolved error %@, %@", error, [error userInfo]); 
     return [NSArray array]; 
    } 

    return results; 

} 

@end 
+0

こんにちはウォーレン。あなたの答えをありがとう。 NSManagedObjectは本当に 'for'ループに必要なクラスでした。 –

+0

管理対象オブジェクトを簡単に解析する方法はありますか?たとえば、管理対象オブジェクトのインスタンスを表現するクラスと、そのすべてのプロパティと他のオブジェクトとの関係を持つクラスはありますか? –

+0

あなたがここで何を望んでいるか分かりません。 NSManagedObjectインスタンスは、データベーステーブルエントリの表現です。 NSEntityDescriptionからエンティティのすべての属性と関係情報を取得できます。 –

関連する問題