我喜歡用FRC控制它,如果他們想要不同/自定義功能,讓委託調用改變它。我也相信FRC一般應該作爲被觀察實體的分類方法來構建。
您可以格式化字符串是全對對象的屬性,但似乎浪費。
你也可以把它變成一個真正的瞬態特性。這可能更合適,但我使用的是現有模型,並不想更改模型。從那個項目開始,我就把這個方法學應用於其他類似的案例。
無論如何,本實施例中幾乎是直的從現有的應用程序截取。我不得不改變一些東西,所以我希望我沒有遺漏任何東西。
創建FRC使用的提取請求,以便根據對象的date
屬性進行排序。這允許在標準屬性上獲取正常的核心數據。
+ (NSFetchedResultsController *)
fetchedResultsController:(NSManagedObjectContext *)context
{
NSFetchRequest* request = [NSFetchRequest
fetchRequestWithEntityName:[self entityName]];
request.sortDescriptors = @[[NSSortDescriptor
sortDescriptorWithKey:@"date"
ascending:YES]];
request.fetchBatchSize = 30;
request.returnsObjectsAsFaults = NO;
NSString *cacheName = [[self entityName]
stringByAppendingString:@"-all-bydate"];
return [[NSFetchedResultsController alloc]
initWithFetchRequest:request
managedObjectContext:context
sectionNameKeyPath:@"dateAsSectionName"
cacheName:cacheName];
}
一個實例變量添加到您的子類的......你會管理它自己...
@implementation MyManagedObjectSubclass {
NSString *dateAsSectionName_;
}
添加的存取方法。我們只創建一次格式化程序。改變它你喜歡的。
- (NSString*)dateAsSectionName
{
static NSDateFormatter *dateFormatter;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"EEE, MMM d, h:mm a";
dateFormatter.dateFormat = @"EEEE MMMM d";
});
if (dateAsSectionName_ == nil) {
NSDate *date = [self primitiveDate];
dateAsSectionName_ = [dateFormatter stringFromDate:date];
}
return dateAsSectionName_;
}
當日期發生變化時清除我們的部分名稱,所以我們將在下次訪問者被調用時重新計算它的值。
- (void)setDate:(NSDate*)date
{
if ([[self primitiveDate] isEqualToDate:date]) return;
[self willChangeValueForKey:@"date"];
[self setPrimitiveDate:date];
[self didChangeValueForKey:@"date"];
dateAsSectionName_ = nil;
}
告訴志願是dateAsSectionName
取決於date
。
+ (NSSet *)keyPathsForValuesAffectingDateAsSectionName
{
return [NSSet setWithObject:@"date"];
}
你可能想補充一點,擁有你想要同時保持實際日期存儲格式的日期基於'NSString'一個截面屬性作爲'NSDate' – Volker
我不確定你的意思,我試圖添加到NSString,但這是行不通的。如果我使用的NSLog我得到這個[_bds fetchedResultsController]節]( 「<_NSDefaultSectionInfo:0x1097ce5d0>」, 「<_NSDefaultSectionInfo:0x1097d0230>」, 「<_NSDefaultSectionInfo:0x1097d0b20>」, 「<_NSDefaultSectionInfo:0x1097ceca0>」, 「<_NSDefaultSectionInfo:0x1097cff00>」, 「<_NSDefaultSectionInfo:0x1097d0010>」, 「<_NSDefaultSectionInfo:0x1097d0600>」, 「<_NSDefaultSectionInfo:0x1097d0790>」, 「<_NSDefaultSectionInfo:0x1097d1770>」, 「<_NSDefaultSectionInfo: 0x1097d1370>「 – Eloy
您的數據模型需要擴展爲具有字符串... – Volker