我有兩種類型的事件存儲在我的核心數據棧中,每個事件都有一個時間戳。我很感興趣,如果有一個很好的方法來顯示這些記錄在UITableView
與部分,其中每個部分是任意長(一天,一週等)。iPhone核心數據如何添加日期部分與時間戳事件?
有沒有辦法將一個核心數據對象的時間戳轉換爲一個節標題,四捨五入的時間?
所以我們會得到:
October 5 < section title
Record 1 < records displayed in the section
Record 2
Record 3
October 6
Record 4
October 7
Record 5
...
-OR-
Week 1
Record 1
Record 2
Week 2
Record 3
...
這裏是我目前使用來實現這一目標是什麼,但它是有限的每個部分是一個天。
但讓我說我沒有想過這個要求,並有一個只有時間戳事件的列表。我怎樣才能把它們分成幾個部分?
//the method used to convert a date into a number to store with the event
-(int)getDateIDFromDate:(NSDate*)date
{
int gmtOffset = [[NSTimeZone localTimeZone] secondsFromGMT];
int dateID =([date timeIntervalSinceReferenceDate]+gmtOffset)/86400;
return dateID;
}
//when inserting a record, the number is saved
newManagedObject.dayID = [NSNumber numberWithInt:[self getDateIDFromDate:date]];
//when retrieving, the number is used as a section key path
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"dayID" cacheName:@"Day"];
//the number gets converted back into the date.
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
// Display the authors' names as section headings.
// return [[[dataManager.dreamEventsController sections] objectAtIndex:section] name];
NSString* dayIndex = [[[dataManager.fetchedResultsController sections] objectAtIndex:section] name];
int dayFromReferenceDate = dayIndex.intValue;
return [dataManager.sectionDateFormatter stringFromDate:[NSDate dateWithTimeIntervalSinceReferenceDate:(dayFromReferenceDate+1)*86400]];
}
這是一個好主意。如果我理解正確,firstLetter方法將包含我當前用於將日期轉換爲dayID並返回的邏輯。 –
我試過了,並沒有奏效。 NSFetchedResultsController的第一個排序鍵必須與節名稱鍵路徑相同,並且沒有這樣的鍵路徑。如果沒有這個,應用程序會崩潰,因爲找不到某個節中的行。我嘗試添加一個瞬態屬性,但不認爲我是正確的,因爲它不可能用作第一個排序描述符。 –
@AlexStone *「必須相同」*這不是一個硬性要求。它必須根據段名稱keypath進行排序,但不能*使用段名稱keypath。即只需使用實際的日期字段進行排序,然後使用添加的字段添加部分。 – mvds