如何解决:为啥核心数据(NSFetchedResultsController)在 iOS5 和 iOS 4 中排序不同
Posted
技术标签:
【中文标题】如何解决:为啥核心数据(NSFetchedResultsController)在 iOS5 和 iOS 4 中排序不同【英文标题】:How to solve: Why is coreData(NSFetchedResultsController) sorting differently in iOS5 and iOS4如何解决:为什么核心数据(NSFetchedResultsController)在 iOS5 和 iOS 4 中排序不同 【发布时间】:2012-07-10 08:54:13 【问题描述】:我有一个用 NSFetchedResultsController 填充的 tableview。
在didSelectRowAtIndexPath
我正在更新当前的row
。这里的排序不应该改变。所选行的不同之处在于,我将其标记为已读。没有标题更改或其他内容。
在 ios4 中,该行被更新并仍然留在他当前的位置,它不会移动到部分的末尾。那是正确的方法。
在 iOS5 中,该行也会更新,但会移动到该部分的末尾。我想阻止这种情况。我怎样才能做到这一点?为什么会这样?
查看我的代码:
- (NSFetchedResultsController *)fetchedResultsController
if (__fetchedResultsController != nil)
return __fetchedResultsController;
NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"EntitySetsCardsInbox" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *inboxPred = [NSPredicate predicateWithFormat:@"archived == 0 AND cardId != 0"];
[fetchRequest setPredicate:inboxPred];
if (sortString == nil)
//sortString = [[NSString alloc] initWithString:@"sortingOrder"];
sortString = [[NSString alloc] initWithString:@"colorOrder"];
sortAsc = NO;
if ([sortString isEqualToString:@"cardTitle"])
NSSortDescriptor *sortDescriptor2 = [[[NSSortDescriptor alloc] initWithKey:sortString ascending:sortAsc selector:@selector(localizedCaseInsensitiveCompare:)] autorelease];
NSArray *sortDescriptors = [[[NSArray alloc] initWithObjects:sortDescriptor2, nil] autorelease];
[fetchRequest setSortDescriptors:sortDescriptors];
XLog(@"sortDescriptors: %@", sortDescriptors);
else
NSSortDescriptor *sortDescriptor2 = [[[NSSortDescriptor alloc] initWithKey:sortString ascending:sortAsc] autorelease];
NSArray *sortDescriptors = [[[NSArray alloc] initWithObjects:sortDescriptor2, nil] autorelease];
[fetchRequest setSortDescriptors:sortDescriptors];
XLog(@"sortDescriptors: %@", sortDescriptors);
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
[...]
【问题讨论】:
【参考方案1】:我认为当你更新你的行时你的排序描述符正在改变。再添加一个 sortdescriptor 来修复列表并再次检查。就我而言,我有一个非常相似的问题,它解决了我的问题。也许你的也是。
【讨论】:
以上是关于如何解决:为啥核心数据(NSFetchedResultsController)在 iOS5 和 iOS 4 中排序不同的主要内容,如果未能解决你的问题,请参考以下文章
iPhone 4 iOS 5 NSFetchedResultsController 如何选择批量大小?