在哪里可以将业务逻辑放在带有Core Data的IOS应用程序中?

时间:2015-10-23 08:17:22

标签: ios xcode

我刚刚开始探索ios和xcode,并开始构建一个使用Core Data的应用程序。

在我的模型中,我有两个相关的实体:

  • 具有examDate和studyStartDate的考试实体
  • 用于计划/记录考试准备的CalendarItem。

Section of my data model

业务逻辑的一部分是:对于studyStartDate和examDate之间的所有日期,我想要一个CalendarItem。

因此,为此,我需要每次日期范围的开始和结束(在studyStartDate和examDate中)创建/删除CalendarItems的代码。

在其他帖子中(例如here)我读到这种类型的业务逻辑应该进入模型(不在控制器中)。所以现在我需要在我的模型中放置一个可以编写代码的地方。

我的问题是:我在哪里创建此代码? 在用于examItem的NSManagedObject的子类中?如何访问examItem中的ManagedObjectContext(如果在我的模型中插入/删除其他记录,我认为我需要它)? 或者我是否需要继承NSManagedObjectContext并在那里构建我的逻辑?

我真的迷失在这里。

更新
感谢下面的答案,我跟进了数据库管理器模型 - 或多或少。尝试保持ManagedObjects简单并专注于单个实体感觉是正确的方向。

我在appdelegate中创建了一个CalendarManager,我实例化了一次。它接收ManagedObjectContext。它订阅在通知中心插入/删除通知,并为每个新的考试设置键值观察者。

顺便说一句:KVO需要只关注考试中的日期项目。遗憾的是,无法使用NSManagedObjectContextObjectsDidChangeNotification。这会遇到无限循环:添加/删除相关的CalendarItem也会改变Exam,这会触发另一个循环。

CalendarManager.h

#import <CoreData/CoreData.h>

@interface CalendarManager : NSObject

-(id)initWith:(NSManagedObjectContext *)moc;

@end

CalendarManager.m

#import "CalendarManager.h"
#import "Exam.h" // NSManagedObject subclass
#import "CalendarItem.h" // NSManagedObject subclass

@interface CalendarManager ()

-(void)updateCalendarItemsFor:(Exam*)exam;
-(void)setObserverFor:(Exam*)exam;
-(void)removeObserverFor:(Exam*)exam;

@property NSArray *keyPaths;
@property NSManagedObjectContext *moc;

@end

这样对我有用。

1 个答案:

答案 0 :(得分:2)

我总是创建一个拥有NSManagedObjectContext并插入/删除的DatabaseManager。我的妈妈们只是没有任何逻辑的愚蠢的课程:P

但我想说这是一个意见问题