带主键的核心数据
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 的对象包装器。以上是关于带主键的核心数据的主要内容,如果未能解决你的问题,请参考以下文章