在managedObjectContext中查找特定对象并计算总和

时间:2015-08-12 11:25:14

标签: ios objective-c core-data

我试图围绕CoreData。所以我有一个静态的tableview用于统计信息,标签包括:"条目数","总距离","总时间"我有我的coredata实体,名为" Recording"及其属性" startDate"," duration",...我希望从CURRENT周获取所有条目,然后一方面显示条目数量,另一方面显示条目数量交出总时间。我知道如何设置获取请求(谢谢,谷歌)

- (NSFetchedResultsController *)fetchedResultsController
{
    if (_fetchedResultsController != nil)
    {
        return _fetchedResultsController;
    }

    if (self.managedObjectContext)
    {
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"Recording" inManagedObjectContext:self.managedObjectContext];
        [fetchRequest setEntity:entity];

        NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"startDate" ascending:NO];
        NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];
        [fetchRequest setSortDescriptors:sortDescriptors];

        NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                                                              managedObjectContext:self.managedObjectContext
                                                                                sectionNameKeyPath:nil
                                                                                         cacheName:nil];
    frc.delegate = self;
    self.fetchedResultsController = frc;

    NSError *error = nil;
    if (![self.fetchedResultsController performFetch:&error])
    {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    }
return _fetchedResultsController;
}

但是我坚持这个特殊的想法,我甚至不确定我是否需要这样做......

2 个答案:

答案 0 :(得分:1)

我现在使用:

解决了
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];

NSEntityDescription *theType = [NSEntityDescription entityForName:@"Recording" inManagedObjectContext:self.managedObjectContext];
fetchRequest.entity = theType;

NSDate *firstDayOfCurrentWeek = [self firstWeekday:[NSDate date]];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"((startDate > %@) AND (startDate <= %@))",firstDayOfCurrentWeek, [NSDate date]];
fetchRequest.predicate = predicate;

NSSortDescriptor *theDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"startDate" ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObjects:theDescriptor, nil];

[fetchRequest setSortDescriptors:sortDescriptors];

并找到这样的总和/总数:

NSFetchedResultsController *fetchedResults = self.fetchedResultsController;

NSInteger allWorkouts = [[fetchedResults fetchedObjects] count];

CGFloat totalDistance = [[[fetchedResults fetchedObjects] valueForKeyPath: @"@sum.distance"] floatValue];

感谢谓词提示:)

答案 1 :(得分:0)