2016-03-20 17 views
3

böyle bir protokol var NSManagedObject alt sınıfta tayin gerektirir CoreData bu yüzden CDUser varlık oluşturdum (Xcode ayrıca bunun için kategori oluşturur):Mülkiyet yöntemi

// CDUser.h 
@interface CDUser : NSManagedObject <UserProtocol> 

@end 

// CDUser+CoreDataProperties.h 
@interface CDUser (CoreDataProperties) 

@property (nullable, nonatomic, retain) NSNumber *uid; 
@property (nullable, nonatomic, retain) NSString *name; 
@property (nullable, nonatomic, retain) NSNumber *rating; 

@end 

// CDUser+CoreDataProperties.m 
@implementation CDUser (CoreDataProperties) 

@dynamic uid; 
@dynamic name; 
@dynamic rating; 

@end 

CDUser aslında UserProtocol uygular ama bu nedenle tüm özellikleri için benzer uyarılar var:

Property 'uid' requires method 'uid' to be defined - use @synthesize, @dynamic or provide a method implementation in this class implementation

aşağıdaki hatayı olsun Sonra CDBook.m tekrar @dynamic uid; eklersek: Nasıl bu

Property declared in category 'CoreDataProperties' cannot be implemented in class implementation

çözebilir uyarılar uygun şekilde mi? Neden CDUser bu protokolü uygulamıyor

cevap

1

. Kategori yerine protokol kullan.

@interface CDUser : NSManagedObject 

@end 

// CDUser+CoreDataProperties.h 
@interface CDUser (CoreDataProperties) <UserProtocol> 

@property (nullable, nonatomic, retain) NSNumber *uid; 
@property (nullable, nonatomic, retain) NSString *name; 
@property (nullable, nonatomic, retain) NSNumber *rating; 

@end 
+1

Bu kod Xcode tarafından otomatik olarak üretilir, böylece sonraki jenerasyonda protokoller tanımlarınız kaldırılacaktır. – eXhausted