Uitableview tableview重载数据无效-tableview数据排序不正确

Uitableview tableview重载数据无效-tableview数据排序不正确,uitableview,core-data,datasource,nsfetchedresultscontroller,reloaddata,Uitableview,Core Data,Datasource,Nsfetchedresultscontroller,Reloaddata,我有一个应用程序具有开和关模式。 在联机模式下,我正在检查服务器的登录, 下载XML文件并解析该文件。所有数据都写入coreData 我正在使用NSFetchedResultsController填充我的TableView 如果我使用关闭模式(要使用脱机模式,coreData实体不应为零), 我只是关闭视图以显示包含coreData数据的tableView 这里的问题是:如果使用脱机模式,数据排序不正确。 重新加载数据不起作用,我已经尝试了很多次 如何重新标记tableView,以便在关闭模式下

我有一个应用程序具有开和关模式。 在联机模式下,我正在检查服务器的登录,
下载XML文件并解析该文件。所有数据都写入coreData

我正在使用NSFetchedResultsController填充我的TableView

如果我使用关闭模式(要使用脱机模式,coreData实体不应为零),
我只是关闭视图以显示包含coreData数据的tableView

这里的问题是:如果使用脱机模式,数据排序不正确。
重新加载数据不起作用,我已经尝试了很多次

如何重新标记tableView,以便在关闭模式下正确排序数据

编辑1:

在关闭模式下,我只执行以下操作:

if (xmlFile) {  
    //FadeOut animation nach erfolgreichem Login
    //und removeFromSuperview
    [UIView animateWithDuration:0.8 
        animations:^{loginView.alpha = 0.0;}
        completion:^(BOOL finished){ [loginView removeFromSuperview]; }];
}  
如何在ViewDidDisplay上对tableview进行排序

编辑2:
这里是我的NSFetchedResultsController:

#pragma mark - Fetched results controller

- (NSFetchedResultsController *)fetchedResultsController
{
    if (__fetchedResultsController != nil)
{
    return __fetchedResultsController;
}

/*
 Set up the fetched results controller.
 */
// Create the fetch request for the entity.
NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];

// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"EntitySetsCards" inManagedObjectContext:self.managedObjectContext];

NSPredicate *inboxPred = [NSPredicate predicateWithFormat:@"archived == 0"];


[fetchRequest setEntity:entity];

// Set the batch size to a suitable number.
[fetchRequest setFetchBatchSize:20];
[fetchRequest setPredicate:inboxPred];


// Edit the sort key as appropriate.
NSSortDescriptor *sortDescriptorSetOrder = [[[NSSortDescriptor alloc] initWithKey:@"sortOrder" ascending:YES] autorelease];
NSSortDescriptor *sortDescriptorColorOrder = [[[NSSortDescriptor alloc] initWithKey:@"colorOrder" ascending:YES] autorelease];
NSSortDescriptor *sortDescriptorSortOrder = [[[NSSortDescriptor alloc] initWithKey:@"sortingOrder" ascending:YES] autorelease];

NSArray *sortDescriptors = [[[NSArray alloc] initWithObjects:sortDescriptorSetOrder, sortDescriptorSortOrder, sortDescriptorColorOrder, nil] autorelease];

[fetchRequest setSortDescriptors:sortDescriptors];


// nil for section name key path means "no sections".
// cacheName auf nil gesetzt, da @"Root" fehler erzeugt hat (FATAL ERROR)
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"setTitle" cacheName:nil];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;


NSError *error = nil;
if (![self.fetchedResultsController performFetch:&error])
{
    /*
     Replace this implementation with code to handle the error appropriately.

     abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. If it is not possible to recover from the error, display an alert panel that instructs the user to quit the application by pressing the Home button.
     */
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}

allFetchedCards = aFetchedResultsController;
allCards = [__fetchedResultsController fetchedObjects];

return __fetchedResultsController;
}    

默认情况下,数据库中存储的数据不进行排序。你有责任对它进行分类。根据您的数据结构,您可以添加索引以帮助排序,也可以按一些逻辑值(如名称、LastSeeEndate等)排序

发布从核心数据检索数据的代码(可能是创建
NSFetchedResultsController

对执行部分1的答复 您真的不想在
NSFetchedResultsController
之外进行排序,因为这需要花费大量精力,而且代码实际上是不必要的。您应该将
NSFetchedResultsController
配置为按照屏幕上显示的方式进行排序。真的没有理由做两次。排序是非破坏性和非持久性的

但是,如果绝对必须排序两次,则需要:

  • 通过
    -fetchedObjects
    -sections
    然后
    -objectAtIndex:
    然后
    -objects
    收集对象数组,以获取节的数组
  • 有了数组,您可以使用描述符调用
    -sortedarray:
    生成最终排序
  • 就像我说的,你真的不想这么做。您需要在与代码中的
    NSFetchedResultsController
    交互的每一点上执行此操作,在典型的
    UITableViewController
    中约为5点。很多零值的额外代码


    您还有一个问题:您是否使用
    NSFetchedResultsController
    显示单元格的数据?你能发布你的
    -tableView:cellForRowAtIndexPath:

    你能发布一些相关的代码吗。我有一个类似的问题,也许我们可以一起解决。我应该在你看来发布什么?我不知道什么与她有关。我想,这里的代码没有错,我只是不知道我要做什么。可以重新进行nssort并在ViewDidDisplay上再次获取吗?您好,Marcus,谢谢您的回答。我已经发布了我的nsfetchedresultscontroller,请参阅我的编辑2。您能告诉我,如何在nsfetchedresultscontroller之外进行排序吗?