Iphone 从核心数据加载日期

Iphone 从核心数据加载日期,iphone,ios,core-data,nsdate,Iphone,Ios,Core Data,Nsdate,我有一个有很多标签的视图,每个标签对应一周一天和一种任务类型。我想从核心数据加载信息,并使用该信息设置每个标签的文本 #import "WeekViewController.h" @implementation WeekViewController - (void) viewDidLoad { gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];

我有一个有很多标签的视图,每个标签对应一周一天和一种任务类型。我想从核心数据加载信息,并使用该信息设置每个标签的文本

#import "WeekViewController.h"

@implementation WeekViewController

- (void) viewDidLoad {

    gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
    [gregorian setFirstWeekday:2];

    mondayMeetings = 0;
    mondayPhoneCalls = 0;
    mondayToDos = 0;

    tuesdayMeetings = 0;
    tuesdayPhoneCalls = 0;
    tuesdayToDos = 0;

    wednesdayMeetings = 0;
    wednesdayPhoneCalls = 0;
    wednesdayToDos = 0;

    thursdayMeetings = 0;
    thursdayPhoneCalls = 0;
    thursdayToDos = 0;

    fridayMeetings = 0;
    fridayPhoneCalls = 0;
    fridayToDos = 0;

    saturdayMeetings = 0;
    saturdayPhoneCalls = 0;
    saturdayToDos = 0;

    sundayMeetings = 0;
    sundayPhoneCalls = 0;
    sundayToDos = 0;

    [self loadInfo:[NSDate date]];

}

- (void) loadInfo:(NSDate *)date {

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(Date >= %@) AND (Date <= %@)", [self dateByMovingToBeginningOfWeek:self.selectedDate], [self dateByMovingToEndOfWeek:self.selectedDate]];

    request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Task" inManagedObjectContext:managedObjectContext];
    [request setEntity:entity];
    [request setPredicate:predicate];

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Date" ascending:NO];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [request setSortDescriptors:sortDescriptors];
    [sortDescriptors release];
    [sortDescriptor release];

    NSError *error = nil;

    mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
    if (mutableFetchResults == nil) {

    }

    for (int i = 0; i < [mutableFetchResults count]; i++) {

        Task *aTask = (Task *)[mutableFetchResults objectAtIndex:i];

        NSDateComponents *comps = [gregorian components:NSWeekdayCalendarUnit fromDate:aTask.Date];

        int weekday = [comps weekday];

        if (weekday == 1  && [aTask.Type isEqualToString:@"PhoneCall"]) {

            mondayPhoneCalls ++;

        }

    }

    NSLog(@"%d", mondayPhoneCalls);

    for (UILabel *go in [self.view subviews]) {

        if (go.tag == 1) {

            go.text = [NSString stringWithFormat:@"%i", mondayPhoneCalls];

        }

    }

}

- (NSDate *) dateByMovingToEndOfWeek:(NSDate *)date {
    unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekdayCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;

    NSDateComponents *parts = [gregorian components:flags fromDate:date];

    [parts setWeekday:7];
    [parts setHour:23];
    [parts setMinute:59];
    [parts setSecond:59];

    return [gregorian dateFromComponents:parts];

}

- (NSDate *) dateByMovingToBeginningOfWeek:(NSDate *)date {

    unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekdayCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;

    NSDateComponents *parts = [gregorian components:flags fromDate:date];

    [parts setWeekday:0];
    [parts setHour:0];
    [parts setMinute:0];
    [parts setSecond:0];

    return [gregorian dateFromComponents:parts];

}

@end
#导入“WeekViewController.h”
@实现WeekViewController
-(无效)viewDidLoad{
gregorian=[[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]自动释放];
[公历第一个工作日:2];
周一会议=0;
mondayPhoneCalls=0;
周一到周五=0;
周二会议=0;
周二电话呼叫=0;
星期二至星期二=0;
周三会议=0;
周三电话呼叫=0;
周三TODOS=0;
周四会议=0;
周四电话呼叫=0;
周四时间=0;
周五会议=0;
fridayPhoneCalls=0;
星期五的时间=0;
周六会议=0;
saturdayPhoneCalls=0;
周六TODOS=0;
sundayMeetings=0;
sundayPhoneCalls=0;
sundayToDos=0;
[自动加载信息:[NSDate日期]];
}
-(作废)装载信息:(NSDate*)日期{

NSPredicate*谓词=[NSPredicate predicateWithFormat:@”(日期>=%@)和(日期您的谓词现在表示“日期为今天日期或更晚且日期为今天日期或更早的对象”。满足该要求的唯一对象是具有今天日期的对象


至于你的另一个问题,你可以看一个IBMoutletCollection。它们用于类似对象的集合(在你的例子中是UILabel)。它基本上是一个IB对象的NSArray,您可以循环并轻松设置它们的值。

真的吗?我尝试只加载与所选日期在同一周内的日期。我计划使用两种方法来实现这一点,一种方法返回所选日期所在的周末,另一种方法返回所选日期所在的周末所以我的谓词至少应该是“日期为一周开始或之后,以及一周结束或更早的对象”“很抱歉,遗漏了这一部分。看起来您的谓词是正确的。我怀疑这是您的dateByMoving方法。您设置了NSDayCalendarUnit标志,但随后将工作日更改为7,保留原始日期不变。这就像说“给我2012年11月3日星期六的日期”--它不存在。请确保这些方法返回的NSDate对象正确,以验证这些方法。