2016-03-20 21 views
3

ich einige Protokolle wie diese:Property erfordern Verfahren in NSManagedObject Unterklasse definiert wird

@protocol UserProtocol <NSObject> 

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

@end 

Dann habe ich einige aktuelle Klasse, die implementiert, dass:

@interface User : NSObject <UserProtocol> 

@end 

Jetzt brauche ich eine andere Implementierung, die verwendet CoreData so erstellt CDUser Einheit (Xcode erzeugt auch Kategorie dafür):

// 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 implementiert tatsächlich UserProtocol aber ich habe Warnungen wie so für alle Eigenschaften:

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

Wenn ich @dynamic uid; wieder hinzufügen in CDBook.m dann bekomme ich folgende Fehlermeldung:

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

Wie kann ich diese lösen Warnungen auf angemessene Weise?

Antwort

1

Ursache CDUser implementiert dieses Protokoll nicht. Verwenden Sie stattdessen das Protokoll für die Kategorie.

@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

Dieser Code wird automatisch von Xcode generiert, so dass bei der nächsten Generation Ihre Protokolldefinitionen entfernt werden. – eXhausted