我有这个简单的模型类,代表RSS文章RSSEntry。
现在我想开始使用这个模型类来运行核心数据,但我没有选中“使用核心数据”复选框来创建项目。
这是班级:
#import <Foundation/Foundation.h>
@interface FRSSEntry : NSObject{
NSString *_blogTitle;
NSString *_articleTitle;
NSString *_articleUrl;
NSDate *_articleDate;
NSString *_articleImageUrl;
NSString *_content;
}
@property (copy) NSString *blogTitle;
@property (copy) NSString *articleTitle;
@property (copy) NSString *articleUrl;
@property (copy) NSDate *articleDate;
@property (copy) NSString *articleImageUrl;
@property (copy) NSString *content;
- (id)initWithBlogTitle:(NSString*)blogTitle articleTitle:(NSString*)articleTitle articleUrl:(NSString*)articleUrl articleDate:(NSDate*)articleDate articleImageUrl:(NSString *)imageUrl andContent:(NSString *)content;
@end
实施是:
#import "FRSSEntry.h"
@implementation FRSSEntry
@synthesize blogTitle = _blogTitle;
@synthesize articleTitle = _articleTitle;
@synthesize articleUrl = _articleUrl;
@synthesize articleDate = _articleDate;
@synthesize articleImageUrl = _articleImageUrl;
@synthesize content = _content;
- (id)initWithBlogTitle:(NSString*)blogTitle articleTitle:(NSString*)articleTitle articleUrl:(NSString*)articleUrl articleDate:(NSDate*)articleDate articleImageUrl:(NSString *)imageUrl andContent:(NSString *)content
{
if ((self = [super init])) {
_blogTitle = [blogTitle copy];
_articleTitle = [articleTitle copy];
_articleUrl = [articleUrl copy];
_articleDate = [articleDate copy];
_articleImageUrl = [imageUrl copy];
_content = [content copy];
}
return self;
}
@end
很简单。现在我该如何转换它以便将其用作核心数据实体?
答案 0 :(得分:1)
因此,要将模型类转换为NSManagedObject
子类,必须删除实例变量声明。然后用@dynamic替换所有的@synthesize语句。这告诉编译器CoreData将为这些属性提供实现,因此它可以在那里发挥作用。然后还需要删除您拥有的自定义初始值设定项,因为NSManagedObject
对象以不同的方式初始化。
代码看起来像
#import <Foundation/Foundation.h>
@interface FRSSEntry : NSManagedObject
@property (copy) NSString *blogTitle;
@property (copy) NSString *articleTitle;
@property (copy) NSString *articleUrl;
@property (copy) NSDate *articleDate;
@property (copy) NSString *articleImageUrl;
@property (copy) NSString *content;
@end
-
#import "FRSSEntry.h"
@implementation FRSSEntry
@dynamic blogTitle;
@dynamic articleTitle;
@dynamic articleUrl;
@dynamic articleDate;
@dynamic articleImageUrl;
@dynamic content;
@end
您通常会使用类似
的内容对其进行初始化// Get the entity description
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"FRSSEntry" inManagedObjectContext:context];
// Insert a new YourModelObject into the context
ReceivedMessage *newMessage = [[FRSSEntry alloc] initWithEntity:entityDescription insertIntoManagedObjectContext:context];
您可以拥有自定义初始值设定项,但必须调用[super initWithEntity:entityDescription insertIntoManagedObjectContext:context]
。所有这些参数的初始化程序都会很长,所以我建议你在初始化对象后设置每个属性。
从您的回复来看,您刚刚开始进行CoreData集成。在处理核心数据时,创建NSManagedObject
子类只是冰山一角。 CoreData是一个复杂的大框架,因此我建议您先阅读https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/cdProgrammingGuide.html。 Stack Overflow也充满了关于这个主题的问题和很好的答案。
我建议你研究的另一件事是MagicalRecord
。这是一个很棒的图书馆,它使一些繁琐的任务变得非常简单:https://github.com/magicalpanda/MagicalRecord