2016-04-12 8 views
1

私は50個のような名前のクラスがあります。table_address、TABLE_NAME、table_lastname、等...文字列でクラスをインスタンス化することはできますか?

の代わりにやって:

table_address *table; 
table =[[table alloc] init]; 
id_to_send = table.id; 

table_name *table; 
table =[[table alloc] init]; 
id_to_send = table.id; 

table_lastname *table; 
table =[[table alloc] init]; 
id_to_send = table.id; 

などを...

が唯一持っているそこの方法ですが1つのループはテーブルを宣言し、それらをインスタンス化してすべてのテーブルからIDを抽出することができます。私は、私は例えばその100倍...

を書くことを強制されないのです願っています:

for (first table to last table) 
{ 
    table_xxxxxxx *table; 
    table =[[table alloc] init]; 
    id_to_send = table.id; 
} 

おかげ

+4

'[[NSClassFromString(@ "...")のalloc]のinit]' – dan

+0

あなたはパターンを使用することができます@Claudio [表モジュール]( http://martinfowler.com/eaaCatalog/tableModule.html)。したがって、テーブルの各フィールドはクラスのインスタンスになります。 (テーブル)。したがって、すべての列は1つのエンティティにカプセル化されます。 – gaussblurinc

+0

本当ですか?私はその解決法を探求するつもりです。 – Claudio

答えて

0

EDIT:次のことを行うことができます最終的に解決策があります。 解決策を見つけました。あなたはここでそれを見つけることができます:D

=>Is it possible to change dynamically the name of the class in the code with a variable?

あなたが行うことができます
+0

また、JSONAcceleratorのようなコードジェネレータも使用できます。 – gaussblurinc

+0

だから、私はその解決法も探求します。ありがとうございます。それが動作すれば私はここに投稿します。 – Claudio

+0

JSONが動的インスタンシエーションと何をしなければならないのか分かりませんか? – Claudio

0

あなたが動的にクラスを作成するNSClassFromStringを使用することができます。それは彼らのすべてがNSManagedObjectあなたのためにあなたは以下の

NSArray * classSuffixes = @[@"suffix1", @"suffix2", @"suffix100"]; 
for(NSString * suffix in classSuffixes) { 
    NSString *tableIdentifier; 

    NSString *className = [NSString stringWithFormat:@"table_%@",suffix]; 
    Class objectClass = NSClassFromString(className); 
    CommonParentClass *table = (CommonParentClass *)[[objectClass alloc] init]; 
    tableIdentifier = table.id; 
    // .... 
} 

ような何かを行うことができますプロパティIDを含むクラスから継承すると仮定すると、あなたは

https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/#//apple_ref/c/func/NSClassFromString

提供名に対応するクラスの参照を作成します

NSArray * classSuffixes = @[@"suffix1", @"suffix2", @"suffix100"]; 
    for(NSString * suffix in classSuffixes) { 
     NSString *tableIdentifier; 

     NSString *className = [NSString stringWithFormat:@"table_%@",suffix]; 
     Class objectClass = NSClassFromString(className); 
     NSManagedObject *table = [[objectClass alloc] init]; 
     NSArray *availableKeys = [[table.entity attributesByName] allKeys]; 
     if ([availableKeys containsObject:@"id"]) { 
      tableIdentifier = [table valueForKey:@"id"]; 
     } 
    } 
+0

こんにちは、私の問題はその部分に付属しています:CommonParentClass * table =(CommonParentClass *)[[objectClass alloc] init]; tableIdentifier = table.id; CommonParentClassは認識されません。 Class objectClassを実行したときにどのようにインスタンス化できますか? – Claudio

+0

私はすべてのクラスが受け取ったオブジェクトをキャストできるように共通のクラスから継承していると仮定しました。 table_address、table_nameを持っているあなたの例では、それらはすべてtable_fieldである可能性のある共通クラスから継承します。その場合、table_fieldはCommonParentClassになり、プロパティ "id"を宣言するものになります。 –

+0

mmmmです。再開するために、私はCoreDataによって作成されたTable_civility、Table_contact、Table_YesNoなどを持っています。だから、これは共通のクラスから継承されない理由です。コンパイル時に型を評価する必要があるため、実行時の動的な型指定が不可能であることを知っていますが、私は "トリック"を行うことができると信じていました:D – Claudio

関連する問題