OO设计&核心数据:汇总计算方法在哪里?

时间:2012-10-24 14:21:27

标签: objective-c ios oop core-data

我有一个NSManagedObject company,其中包含(NSString*) name(NSDate*) lastAvailableInterim属性。

我想计算公司数组(NSArray *companies)的汇总值,例如,根据以下代码示例,上一个报告日期等于季度结束:

- (NSDate*)latestAvailableInterimFor:(NSArray*)companies
{   // returns the maximum interim report date for all companies in the selection, date has to have end month = quarter end
    NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
    __block NSDate *maxLatestAvailableInterim;

    [self.companies enumerateObjectsUsingBlock:^(IBCompany *company, NSUInteger idx, BOOL *stop) {
        NSDateComponents *monthComponents = [gregorian components:NSMonthCalendarUnit fromDate:company.latestAvailableInterim];
        NSAssert((company.latestAvailableInterim),@"LatestAvailableInterim must be <> NIL!");
        NSInteger month = [monthComponents month];
        if ( month % 3 == 0 ) maxLatestAvailableInterim = MAX(maxLatestAvailableInterim, company.latestAvailableInterim);
    }];
    return maxLatestAvailableInterim;
}

面向对象的角度并基于 MVC 方案,我会在哪里放置此代码?

在视图控制器中,它处理结果值或“接近”(NSManagedObject*) company子类,或者将类别添加到NSArray是否有意义?

谢谢!

1 个答案:

答案 0 :(得分:1)

不是NSArray的类别。您可以向接收NSManagedObjectContext的IBCompany类添加一个类方法,并使用它来执行提取以查找您要查找的正确日期。尝试通过NSFetchRequest找到正确的日期,而不是进行内存检查。

您也可以在处理结果信息的视图控制器中执行此操作。

相关问题