Ios 如何按添加数据的顺序获取核心数据,并在UITableView中按该顺序显示?

Ios 如何按添加数据的顺序获取核心数据,并在UITableView中按该顺序显示?,ios,objective-c,xcode,uitableview,core-data,Ios,Objective C,Xcode,Uitableview,Core Data,我正在UITableViewController中显示一个名为Skills的实体。 我在viewDidLoad中获取如下结果: -(void)fetchTableData { NSManagedObjectContext *context = [self managedObjectContext]; NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *ent

我正在
UITableViewController
中显示一个名为Skills的实体。 我在
viewDidLoad
中获取如下结果:

-(void)fetchTableData {
    NSManagedObjectContext *context = [self managedObjectContext];

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Skills" inManagedObjectContext:context];
    [fetchRequest setEntity:entity];

    NSError *error;

    self.skillsArray = [[self.managedObjectContext executeFetchRequest:fetchRequest error:&error] mutableCopy];
}
此外,我的索引路径单元格为:

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

    // Configure the cell...

    Skills *skill = self.skillsArray[indexPath.row];

    // Skills is a NSManagedObject, I added the Skills.h file.

    [cell.textLabel setText:skill.nameOfSkill];

    return cell;
}
我正在通过在委托方法中使用带有文本字段的
UIAlertView
向核心数据添加新的
NSManagedObject*newSkill

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == 1) {
      NSLog(@"Add button clicked");
      NSString *newSkillText = [alertView textFieldAtIndex:0].text;
      NSManagedObjectContext *context = [self managedObjectContext];
      Skills *newSkill = [NSEntityDescription insertNewObjectForEntityForName:@"Skills" inManagedObjectContext:context];
      newSkill.nameOfSkill = newSkillText;
      [self.skillsArray addObject:newSkill];
    } else {
       // Do something else
    }
    [self.tableView reloadData];
}
每次我重新加载数据时,单元格都会按照添加数据的顺序显示数据,但是如果关闭视图控制器并返回,单元格会按照与添加数据不同的顺序显示数据吗?奇怪的是,我正在使用相同的代码添加核心数据,并在另一个
UITableViewController
中检索它,而且它从来不会显示不正常。在这个
UITableViewController
中添加的数据如下:我正在推到另一个
UIViewController
并在那里添加信息,然后返回到tableview。在这段代码中,我在视图控制器中添加信息,可能与此有关?
我还知道我可以添加NSSortDiscriptor,例如:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]initWithKey:@"nameOfSkill" ascending:YES];
NSArray *sortDescriptors = @[sortDescriptor];

但是它是按名称来做的,我想按添加的方式来做,而不必为索引添加另一个属性,因为我从来没有对其他数据这样做过,它总是按照添加的顺序显示

您必须添加一个属性进行排序…更新、递增计数器或插入的时间戳。如果子类NSManagedObject,则可以在
-awakeFromInsert
中写入此值。然后,tableview的获取请求将根据该属性进行排序。

对于所需的结果,您需要根据核心数据数据库自动生成的时间戳或主键对其进行排序

核心数据有自己的主键——您不必添加主键。您可以使用


NSManagedObjectID*moID=[ManagedObjectId]

您将无法按原样获取数据。您必须插入一个“时间”字段,然后可以根据它进行排序

添加唯一的“数据\u id”字段。在插入数据之前,请始终检查计数。并相应地给数据_id加1到计数。然后从核心数据中提取数据后,根据数据id对其进行排序


你可以随心所欲

核心数据没有默认排序。我不会假设objectID的排序将按照创建对象的顺序进行。只需创建一个带有时间戳的属性。