属性需要在NSManagedObject子类中定义方法

时间:2016-03-20 18:32:52

标签: objective-c core-data protocols categories nsmanagedobject

我有这样的协议:

@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'中声明的属性无法在类实现中实现

如何以正确的方式解决这些警告?

1 个答案:

答案 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