带主键的核心数据

Posted

技术标签:

【中文标题】带主键的核心数据【英文标题】:Core data with primary key 【发布时间】:2011-03-26 05:55:28 【问题描述】:

我想根据主键从核心数据(sqlite 数据库)中检索数据。它以升序或降序显示数据..数据的排序不像数据库.. 我的代码是:

- (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];
    // Edit the entity name as appropriate.
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Tutorial" inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];

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

    // Edit the sort key as appropriate.
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Topic" ascending:NO];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

    [fetchRequest setSortDescriptors:sortDescriptors];

    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
    aFetchedResultsController.delegate = self;
    self.fetchedResultsController = aFetchedResultsController;

    [aFetchedResultsController release];
    [fetchRequest release];
    [sortDescriptor release];
    [sortDescriptors release];

    return fetchedResultsController;
   

【问题讨论】:

【参考方案1】:

你的代码说

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Topic" ascending:NO];

因此您的结果将按“主题”字段降序排序

也许

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

除非你从一些遗留数据库迁移,否则不要认为你应该在 coredata 中使用“id”

【讨论】:

我使用了这个但没有工作,因为我在核心数据模型中只有主题和描述字段。我也使用了来自 sqlite 的 Z_PK 但没有工作。我应该在模型中创建 id 字段吗? 一般模型中不需要“id”字段。如果您只有“主题”和“描述”,那么这些是您对检索到的数据进行排序的唯一选择。我可能对你想要做的事情有点困惑 为什么要按ID排序?最终目标是按创建时间排序吗? 这就像一个教程应用程序...我添加了诸如介绍、历史、语法之类的主题,这一切都应该按顺序排列...无论如何我在模型中添加了 Id 字段..并按 id 排序。 . 感谢您给我们时间 @user640780 -- 如果您尝试直接写入 SQLite 文件,您可能会损坏它。此外,SQL 字段中的字段不一定直接映射到托管对象。不要误以为 Core Data 只是 SQL 的对象包装器。

以上是关于带主键的核心数据的主要内容,如果未能解决你的问题,请参考以下文章

MySql 错误:1175(更新时没有带主键的位置),尽管我确实使用了 PK,并且在查询中没有进行连接

mysql 联表查询 巨慢

Mysql 查询速度慢怎么办

如何查找MySQL中查询慢的SQL语句

如何解决mysql 查询和更新速度慢

如果mysql里面的数据过多,查询太慢怎么办?