2015-01-01 41 views
5

NSManagedObject'im var. Bir örnek oluşturduğumda, beklenmedik bir şekilde isKindOfClass yöntemini başarısız olur.NSManagedObject başarısız oluyor isKindOfClass test

NSEntityDescription *entity = [NSEntityDescription entityForName:@"DayModel" inManagedObjectContext:context]; 
DayModel *day = [[DayModel alloc] initWithEntity:entity insertIntoManagedObjectContext:context]; 

if ([day isKindOfClass:[DayModel class]]) { 
    NSLog(@"True"); 
} else { 
    NSLog(@"False"); 
} 

Çıktı:

Class objectClass = [day class]; 
Class classClass = [DayModel class]; 

Ve bu ayıklayıcısında bakarak ne buldum:

enter image description here

False 

Aşağıdaki kodu eklendi

Baskı, classClass "DayModel" yazdırır.

Bunun alakalı olduğundan emin değilim, ancak Swift'de DayModel uygulanmaktadır.


GÜNCELLEME

Bu iOS uygulamasında benim test sınıfında başarısız ama değil. Sorun, this issue'a benziyor. Ancak, test hedefine ulaşabileceğim bütün dersleri ekledim ve hala başarısız.

+1

Değil emin değilim, ama bu ... http://stackoverflow.com/a/12161219/2274694 –

+0

Teşekkür yardımcı olabilir, Bence bu yakın.Bu test sınıfında başarısız oluyor, ancak uygulamada çalışıyor. Ancak tüm sınıfları hedefe ekledim ... – rob

+0

Model düzenleyicide, sınıf adı xxx.DayModel olmalı, burada xxx uygulama modülünüzün adıdır. Bu dava mı? – jrturton

cevap

5

Sadece aynı problemi yaşadım. isKindOfClass returning NO unexpectedly

kök nedene sahip sebebiyle çok fazla kaynak dosyaları edildi:

benim durumumda sorun bağlantı ile güncellemesinde söz gibi deney projesinde kaynak dosyasını eksik olduğunu aslında DEĞİL oldu aynı sınıf. Test hedefinizde muhtemelen uygulamanızı içeren hedefinize hedef bağımlılığınız olur, yani kaynak dosyayı zaten dahil etmiş olursunuz. Bu nedenle, 'Oluşturma Aşamaları' sekmesindeki sınama hedefi için 'Derleme Kaynakları' öğesinden isKindOfClass içinde kullanmakta olduğunuz sınıfı içeren kaynak dosyayı kaldırdığınızdan emin olun. Üste |

(Senin durumunda DayModel.m kaldırmak)

Benim burada sorununa çözüm buldu: isKindOfClass and NSStringFromClass disagree about UIApplicationDelegate

Aynı sınıfla birden kaynak dosyaları içerken isKindOfClass garip davranışa sahip görünüyor, çünkü iki sınıfı aynı göremiyorlar.

+0

@dynamokaj öneri için teşekkürler. Ancak, DayModel'i test hedefindeki kaynakları derlemekten kaldırırsam, derleme hatası alırım çünkü DayModel artık test sınıfında görünmez. – rob

4

Kafamı saatlerce buna karşı vurarak ve web'de bulabildiğim her şey Hedefler olayıydı. "Sınıf" alanını xcdatamodeld editöründe ayarlamamış olmama rağmen, sınıfın adı olması gerektiğinde hala "NSManagedObject" idi ...

Sınıf isimlerinin her ikisinde de olduğundan emin olun. Veri Modeli Denetçisinde "Ad" alanı VE "Sınıf" alanı (Cmd-Opt-3). Yönetilen nesneler için

+0

Bu yanıt için teşekkür ederiz. Bu benim sorunumu çözdü. –

0

sınıfını kontrol etmek için bu yolu kullanmak daha iyidir:

if ([object.entity.name isEqualToString:NSStringFromClass(MyManagedObjectSubclass.class)]) { 

} 
İlgili konular