2013-07-09 21 views
10

örneğine gönderilen tanınmayan seçici NSManagedObject öğesini genişletmeye çalışıyorum. XCode'u kullanarak, MyBox.m ve MyBox.h (doğrudan xcdatamodel dosyasından) oluşturdum. [NSManagedObject sayHello]: 0x

Sonra bu dosyaları modifiye:

#import <Foundation/Foundation.h> 
#import <CoreData/CoreData.h> 


@interface MyBox : NSManagedObject 

@property (nonatomic, retain) NSDate * endDate; 
@property (nonatomic, retain) NSNumber * globalId; 
@property (nonatomic, retain) NSString * name; 
@property (nonatomic, retain) NSDate * startDate; 

-(NSString *)sayHello; 

@end 

ve

#import "MyBox.h" 
@implementation MyBox 

@dynamic endDate; 
@dynamic globalId; 
@dynamic name; 
@dynamic startDate; 

-(NSString *)sayHello { 
    return @"hello"; 
} 

@end 

Bütün myBoxes getirebilir

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription 
            entityForName:@"MyBox" inManagedObjectContext:context]; 
    [fetchRequest setEntity:entity]; 

NSMutableArray *myBoxes = [context executeFetchRequest:fetchRequest error:&error]; 

ama daha sonra ararım

MyBox *myBox = [myBoxes objectAtIndex:indexPath.row];  
    [myBox sayHello]; 

derler ama sadece ben burada benzer sorunları bulunan

çalışır

NSLog(@"%@", myBox.name); 

gibi bir değer okursanız o zaman

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSManagedObject sayHello]: unrecognized selector sent to instance 0x8e73fc0' 

olsun, ama hiçbir çözüm. Yardımlarınız için teşekkürler.

+8

Muhtemelen varlığın sınıfını coredata düzenleyicisinde 'MyBox' olarak ayarlamayı unutmuşsunuzdur. – Alladinian

+1

Coredata düzenleyicisinde Entity-> Name = Entity-> Class = "MyBox" ayarını yaptım. Diğer bazı özellikleri ayarlamak zorunda mıyım? – stefanr

+0

Hmm bu garip. Hayır bu yeterli olmalı ... Belki birden fazla versiyonunuz var mı? – Alladinian

cevap

4

Sınıf adını MyBox öğesinde doğru olarak ayarladığınızı varsayarsak, uygulamanın Çekirdek Veri yönetilen nesne modelinizin eski bir sürümünün olduğunu tahmin ederdim. Yapınızı temizleyin ve iyi bir ölçüm için uygulamayı simülatör/cihazda silin. % 100 emin olmak için, türetilmiş veri klasörünüzü de silin.

Bundan sonra çalışmazsa, varlık sınıfı adını doğru ayarlamadığınıza bahse girerim. NSEntityDescription'u yazdırın ve beklediğinizden emin olun.

19

Sadece aynı sorunu yaşıyorum. Sınıf adını myApp.xcdatamodeld -> configurations -> default -> entities -> myEntity'daki NSManagedObject alt sınıfımın adına değiştirerek çözdüm.

+1

Lanet olsun, bu şeyi hep unutuyorum. –

+0

Teşekkürler! Bu beni öldürüyordu D: –

+1

Ben Xcode 8 nesnesini c Editor-> NSManagedSubclass oluşturun ve Yapılandırma içinde aynı sorunlara neden olan tüm varlıklarımın önündeki periyotlara sahiptim, ancak bunları yeniden adlandırıp otomatik olarak oluşturulmuş kodu eşleştirdi. –

0

xcdatamodeld'de doğru sınıf adı ayarlanmıştı, ancak sınıfın .m dosyasını hedefime dahil etmedim. Sol kenar çubuğunda .m'yi tıklatmalı, ardından Hedef Üyelik altında sağ kenar çubuğunda doğru kutuyu işaretlemeliydim.

İlgili konular