2016-04-12 29 views
1

Ben gibi isimlerle 50 sınıfları: vb table_address, tablo_ismi, table_lastname ... Bir sınıfa bir dize ile örnek vermek mümkün mü?

yerine

yapıyor: vb

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; 

...

sadece sahip olmak bir yolu var mı tabloları bildirebilen ve her tablodaki kimliği ayıklamak için bunları başlatan bir döngü. Sen NSClassFromString kullanabilirsiniz

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

Teşekkür

+4

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

+0

Eğer desen kullanabilirsiniz @Claudio [Tablo Modülü] (http://martinfowler.com/eaaCatalog/tableModule.html). Böylece, tablodaki her alan bir sınıf örneğidir. (tablo). Yani, tüm sütunlar bir varlık içine kapsüllenmiş olacak. – gaussblurinc

+0

Gerçekten mi? Bu çözümü araştırmaya gidiyorum. – Claudio

cevap

0

DÜZENLEME:aşağıdakileri yapabileceğiSonunda bir çözüm var. Çözümü buldum. Burada bulabilirsiniz: D

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

bunu yapabilirsiniz
+0

ana sorunudur, JSONAccelerator gibi kod jeneratörlerini kullanabilirsiniz. – gaussblurinc

+0

Bu çözümü de araştıracağım. Bunun için teşekkürler. Çalışırsa ben burada yayınlayacağım. – Claudio

+0

JSON'un dinamik bir instanciasyonla ne ilgisi olacağını anlamıyorum? – Claudio

0

dinamik sınıf oluşturmak için: Ben 100 kez ... Örneğin

olduğunu yazmak zorunda değilim umuyoruz. Bu hepsi bir NSManagedObject Eğer için aşağıdaki

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; 
    // .... 
} 

gibi bir şey yapabileceğini mülkiyet kimliği içeren bir sınıftan miras varsayarsak

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

sağlamak adına karşılık gelen bir sınıfı başvurusu yaratır

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

Merhaba, benim sorunum şu kısımda geliyor: CommonParentClass * table = (CommonParentClass *) [[objectClass alloc] init]; tableIdentifier = table.id; CommonParentClass'ı tanımıyor. Class objectClass'ı ne zaman hazırlayabilirim? – Claudio

+0

Alınan nesneyi yayınlayabilmek için tüm sınıflarınızın ortak bir sınıftan miras aldığını varsaydım. Table_address, table_name öğesinin bulunduğu örneğinizde, hepsi table_field olabilecek ortak bir sınıftan miras alır. Bu durumda, table_field bizim CommonParentClass olurdu ve "id" –

+0

mmmm görüyorum ilan olacaktır. Özgeçmiş için, CoreData tarafından oluşturulmuş Table_civility, Table_contact, Table_YesNo vb. Var. İşte bu yüzden bu ortak bir sınıftan miras değil. Çalışma zamanında dinamik yazmanın mümkün olmadığını biliyorum çünkü derleme zamanında değerlendirilmeli, ancak bir "hile" yapabileceğime inandım: D – Claudio

İlgili konular