核心数据建模基础

时间:2013-01-25 12:29:54

标签: iphone ios xcode core-data

我正在开发一个用于学习目的的应用程序。它是使用NSXMLParser的feed解析器。除了持久性之外,几乎所有事情都已完成。我已经学习了归档并在我的项目中实现了它,但为了更好的解决方案并使我的学习曲线更好,我决定将我的应用程序移动到Core Data。

下面是我的解析器代码。 FeedChannel正在处理feedburner的feed中的channel属性,并且还会抓取FeedItem文件正在处理的“items”。

FeedChannel.h

#import <Foundation/Foundation.h>

@interface FeedChannel : NSObject <NSXMLParserDelegate> {

    NSMutableArray *items;
    NSMutableString *currentString;
}

@property (nonatomic, assign) id parentParserDelegate;
@property (nonatomic, retain) NSString *title;
@property (nonatomic, retain) NSString *sDescription;
@property (nonatomic, readonly) NSMutableArray *items;

@end

FeedItem.h

#import <Foundation/Foundation.h>

@interface FeedItem : NSObject <NSXMLParserDelegate> {

    NSMutableString *currentString;

}

@property (nonatomic, assign) id parentParserDelegate;
@property (nonatomic, retain) NSString *title;
@property (nonatomic, retain) NSString *link;
@property (nonatomic, retain) NSString *creator;
@property (nonatomic, retain) NSString *pubDate;
@property (nonatomic, retain) UIImage *thumbnail;


@end

我曾尝试学习CoreData,但对于新程序员来说,显然有点复杂。

目前我所做的是我在项目中添加了CoreData框架,创建了一个模型文件,添加了两个名为FeedChannel和FeedItem的实体。我不知道怎么做的是:

1)我是否应该使用Xcode中的“创建托管子类”来覆盖现有文件,或者只是在检查器面板中的每个条目的数据模型中提及类名,或者两种方法都相同?

2)如果我使用“创建托管子类”,它也使用动态而不是合成,我不知道它是否会影响我的项目。

3)如何处理缩略图属性,因为核心数据的数据模型中存在UIImage类型。

和最重要的问题:

4)如何处理FeedItem中持有项目的FeedChannel文件中的NSMutableArray“items”?我是否需要以某种方式建立一对多的关系?

希望它能回答新手所面临的与核心数据相关的所有基本问题。提前致谢。

1 个答案:

答案 0 :(得分:1)

  1. &#34;创建托管子类&#34;快捷方式就是这样。所有它真正做的是子类NSManagedObject(与NSObject对比)并为您的所有属性和关系创建属性。所以不,你不必使用它。如果您愿意,也可以手动执行相同操作。

  2. 是的,托管对象的属性必须为@dynamic。这告诉编译器该属性将在运行时由核心数据解析。

  3. 您需要处理任何对象的transformable类型 - 您的属性类型为id,通用对象。

  4. 核心数据将取代您的阵列。您在频道和Feed项之间存在to-many关系。确保在Feed项和渠道之间创建反to-one关系,并将关系标记为反向。

  5. 使用Core Data有一些很好的教程和书籍。起初看起来有点令人生畏,但实际上并没有那么糟糕。