1
我有一個有很多標籤的視圖,每個標籤對應一個星期的一天和一種任務。我想從核心數據加載信息並使用該信息來設置每個標籤的文本。從核心數據中載入日期
#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
但它只註冊一個任務,如果它的日期是當前日期(順便說一句)。任何人都可以想出一種更有效的方法來設置每個標籤的文本,而不是每個標籤都有一個出口,或者循環瀏覽所有視圖的子視圖並檢查它們的標籤?
任何幫助非常感謝。
真的嗎?我試圖做的只是加載日期與選定日期相同的一週。我計劃通過使用兩種方法來做到這一點,其中一種方法返回所選日期所在星期的結尾,另一種方法返回一週的開始。所以我的謂詞至少應該說「對象的日期是一週或更晚的日期,以及本週末或更早的日期」 –
對不起,錯過了那部分。看起來你的謂詞是正確的。我懷疑這是你的dateByMoving方法。您設置了NSDayCalendarUnit標誌,但是您將工作日更改爲7,原樣保持原狀。這就像說「給我2012年11月3日星期六的日期」 - 它不存在。通過確保它們返回的NSDate對象是正確的來驗證這些方法。 –