Ios 为什么每次在UITableViewController中我的核心数据都以不同的顺序显示?

Ios 为什么每次在UITableViewController中我的核心数据都以不同的顺序显示?,ios,objective-c,uitableview,core-data,Ios,Objective C,Uitableview,Core Data,使用UITableViewController显示游戏分数。 分数将显示1,5,1,13 他们被保存的顺序,但是在查看了两到三次分数后,他们开始改变顺序。分数将显示 5,1,1,13或1,13,1,5 我用这个代码保存分数 -(void)saveDate { NSManagedObjectContext *context = [self managedObjectContext]; NSManagedObject *newScore = [NSEntityDescri

使用
UITableViewController
显示游戏分数。
分数将显示1,5,1,13
他们被保存的顺序,但是在查看了两到三次分数后,他们开始改变顺序。分数将显示
5,1,1,13或1,13,1,5
我用这个代码保存分数

    -(void)saveDate
{
    NSManagedObjectContext *context = [self managedObjectContext];
     NSManagedObject *newScore = [NSEntityDescription insertNewObjectForEntityForName:@"Scores" inManagedObjectContext:context];
    NSNumber *theScore = [[NSNumber alloc]initWithInt:self.score];
    [newScore setValue:theScore forKeyPath:@"score"];
}
我的实体名称是“分数”,其中有一个属性名为“分数
我将
核心数据
加载到
表格视图
内部
视图加载

  - (void)viewDidLoad
{
  [super viewDidLoad];
  NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
  NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Scores"];
  self.scores = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
  [self.tableView reloadData]; 
}
self.scores是一个
NSMutableArray
属性,我将数据复制到该属性中,以便在
NumberOfRows
中使用
[self.scores count]

这是我的托管对象上下文的代码

     - (NSManagedObjectContext *)managedObjectContext
{
  NSManagedObjectContext *context = nil;
  id delegate = [[UIApplication sharedApplication] delegate];
  if ([delegate performSelector:@selector(managedObjectContext)]) {
      context = [delegate managedObjectContext];
  }
  return context;
}
要显示单元格,我使用此代码

      - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

  // Configure the cell...
  NSManagedObject *number = [self.scores objectAtIndex:indexPath.row];
  [cell.textLabel setText:[NSString stringWithFormat:@"Score: %@", [number valueForKey:@"score"]]];
}

我在另一个应用程序中使用了这个精确的代码,表中的数据总是按照保存的精确顺序显示。在使用该方法寻找答案之前,我已经阅读了大量文档并搜索了其他地方。我确实理解为什么信息会改变顺序。谢谢你的帮助

您需要设置NSFETCH请求的排序描述符。我无法回答为什么另一个应用程序中的相同代码每次都以相同的顺序返回数据。我在文档中没有看到任何关于在没有附加排序描述符的获取请求期间返回结果的顺序的信息。例如,如果您有一个具有名为“name”的属性的实体,您可能希望

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];

关于代码的一些注释

首先要检索一个有序的结果,您应该对score属性使用排序描述符

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"score"
    ascending:YES];
NSArray *sortDescriptors = @[sortDescriptor];
[fetchRequest setSortDescriptors:sortDescriptors];
第二,不要运行请求,而不对错误传递nil并检查返回值

NSError *error;
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
    // Handle the error.
}

最后,在处理
UITableView
s时,请利用
NSFetchedResultsController

谢谢!这也是一个很好的答案!谢谢我刚刚在上一个应用程序中看到我确实使用了NSSortDescriptor。