2012-08-26 24 views
1

我想要做的是每x行使得NSFetchedResultsController部分。NSFetchedResultsController中的每3行分区

我试图做一个短暂的财产,将根据其索引像这样给予其部分:

- (NSNumber*)section 
{ 
    [self willAccessValueForKey:@"section"]; 
    NSManagedObjectContext* context = [(AppDelegate*)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
    NSFetchRequest* fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Animal"]; 
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES]]]; 
    NSArray* array = [context executeFetchRequest:fetchRequest error:NULL]; 
    int order = [array indexOfObject:self]; 
    NSNumber *tmpValue = [NSNumber numberWithInt:order/3]; 
    [self didAccessValueForKey:@"section"]; 
    return tmpValue; 
} 

,并取得了视图 - 控制的每个对象触发该功能刷新部分:

-(void)refreshSection 
{ 
    NSManagedObjectContext* context = [(AppDelegate*)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
    NSFetchRequest* fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Animal"]; 
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES]]]; 
    NSArray* array = [context executeFetchRequest:fetchRequest error:NULL]; 
    int order = [array indexOfObject:self]; 
    [self setSection:[NSNumber numberWithInt:order/3]]; 
} 

此解决方案可以工作,但对于大量对象无效。

基本上,我想要实现的是:

部分0:
一个
b
d
第1节:
È

如果我加入C:

第0部分:
a
b
Ç
第1节:
d
Ë

是否有其他更优雅的方式来做到这一点?

谢谢..

回答

0

显然表现,都将受到负面影响,如果你做一个短暂的财产里面取。

不要担心这种瞬态属性。相反,在numberOfSection方法中,只需返回被3除以四舍五入的对象数。

以及在部分中的行数,只返回3,但是记住最后一节将是由3

分对象的剩余的号码当您添加一个对象,记得要更新表这些方法将再次被调用。

+0

你的方法工作,在每当发生任何变化重装表视图的情况下,但如果我想动画使用更新模块的添加或删除,这将是非常难翻译的fetchedresultscontroller和表视图之间indexpathes,而且我还必须管理插入和删除部分,因为从fetchedresultscontroller的角度来看,只有一个部分。这就是为什么我选择了一个直接来自获取控制器的解决方案。 –

+0

你说这会很难,不是不可能的?有时当你有特殊的要求时,即使它不够优雅,你也需要特殊的解决方案。如果表演是必须的,那么没有多少选择。 –