我正在编写一个应用程序,其中包含许多我在工厂方法中创建的NSFetchedResultsController
个实例。
现在我试图通过其属性(连接实体名称,谓词,排序信息......)来为控制器创建一个缓存名称。
如果有人之前已经这样做过,请分享您的经验:
作为一个想法:
我也想知道为什么NSFetchedResultsControllers实现本身还没有处理它。 为什么我要手动分配一些缓存名称,这似乎是一个容易出错的开销!或者我在这里遗漏了什么?
答案 0 :(得分:1)
我很惊讶,似乎没有人感兴趣。 我猜想,每个处理大量动态创建的resultsControllers的人都需要这个!
无论如何,这是我的解决方案:
// NSFetchedResultsController+GenericCache
- (id)initWithFetchRequest:(NSFetchRequest *)fetchRequest
managedObjectContext:(NSManagedObjectContext *)context
sectionNameKeyPath:(NSString *)sectionNameKeyPath
useCache:(BOOL)useCache {
NSString *cacheId = nil;
if (useCache) {
cacheId = [NSString stringWithFormat:@"%@-%@-%@"
, sectionNameKeyPath
, [fetchRequest entityName]
, [[fetchRequest predicate] predicateFormat]];
for (NSSortDescriptor *descriptor in [fetchRequest sortDescriptors]) {
NSString *sortId = [NSString stringWithFormat:@"-%@-%@-%@"
, [descriptor key]
, ([descriptor ascending]) ? @"ascending": @"descending"
, NSStringFromSelector([descriptor selector])];
cacheId = [cacheId stringByAppendingString:sortId];
}
}
return [self initWithFetchRequest:fetchRequest
managedObjectContext:context
sectionNameKeyPath:sectionNameKeyPath
cacheName:cacheId];
}
- (void)deleteCache {
[[self class] deleteCacheWithName:[self cacheName]];
}
我还在测试,我对评论非常开放。改进建议。
请帮助使其可靠。