我有这样的协议:
@protocol UserProtocol <NSObject>
@property (nonatomic, strong) NSNumber *uid;
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSNumber *rating;
@end
然后我创建了一些实现它的实际类:
@interface User : NSObject <UserProtocol>
@end
现在我需要另一个使用CoreData
的实现,因此我创建了CDUser
实体(Xcode
也为此生成了类别):
// 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
实际上实现了UserProtocol
,但我对所有属性都有这样的警告:
属性'uid'需要定义方法'uid' - 使用@synthesize,@ dynamic或在此类实现中提供方法实现
如果我在@dynamic uid;
中再次添加CDBook.m
,则会收到以下错误:
在类'CoreDataProperties'中声明的属性无法在类实现中实现
如何以正确的方式解决这些警告?
答案 0 :(得分:3)
原因CDUser
未实施此协议。而是在类别上使用协议。
@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