Iphone 有没有办法在SQLite管理器中对列重新排序?

Iphone 有没有办法在SQLite管理器中对列重新排序?,iphone,objective-c,sqlite,Iphone,Objective C,Sqlite,我有一个包含大量数据的.csv文档。它有71个不同的列 现在我想将这些数据导入核心数据。但当我在xcdatamodel中创建属性时,属性按其名称排序,而不是按我希望的顺序排序。因此,当创建.sqlite文件时,列的顺序是错误的。我试图在SQLite管理器中对它们进行排序,但当我重新打开.SQLite时,列的顺序与更改之前相同 有没有办法在SQLite管理器中对列重新排序 嗯,71列是很多。因为您使用的是核心数据,所以我建议尝试稍微去规范化一点。核心数据不是表格数据库。也就是说,我建议跟踪当前列,

我有一个包含大量数据的.csv文档。它有71个不同的列

现在我想将这些数据导入核心数据。但当我在xcdatamodel中创建属性时,属性按其名称排序,而不是按我希望的顺序排序。因此,当创建.sqlite文件时,列的顺序是错误的。我试图在SQLite管理器中对它们进行排序,但当我重新打开.SQLite时,列的顺序与更改之前相同


有没有办法在SQLite管理器中对列重新排序

嗯,71列是很多。因为您使用的是核心数据,所以我建议尝试稍微去规范化一点。核心数据不是表格数据库。也就是说,我建议跟踪当前列,并将数据存储在数组中。然后,根据需要将数据分离到NSManagedObject中

编辑:

让我们假设您的sqlite数据库按此顺序有三列:
firstName
lastName
middleInitial
。现在想象一下,您的CSV文件中有不同的顺序,如
lastName
middleInitial
firstName
。您可以对CSV文件或sqlite文件进行重新排序,但由于您使用的是核心数据,因此可以用另一种方式进行排序

您将拥有一个包含所有属性的实体。在我的示例中,它是“Person”实体。因此,我们继续创建这个Person实体的一个实例

Person *newPerson = [[Person alloc] initWithEntity:[NSEntityDescription entityForName:@"Person" inManagedObjectContext:context] insertIntoManagedObjectContext:context];
现在,您需要维护对这个
Person
实例的引用,以便在解析CSV时可以访问它。我推荐戴夫·德隆的。本质上,它允许对CSV文件进行基于事件的解析


当你点击一个新字段时,检查它是哪个字段号。您可以通过保持currentField变量,当您点击新行时将其重置为零,并在每个字段上递增来实现这一点。现在,当您点击一个字段时,如果数字是0或第一个字段,则设置
newPerson.lastName
。如果是第二个字段,则指定
newPerson.middleInitial
。如果点击第三个字段,则设置
newPerson.firstName
。其思想是,您可以在不接触sqlite数据库的情况下分配持久属性。如果您使用的是核心数据,这是一种方法。

好吧,71列是很多。因为您使用的是核心数据,所以我建议尝试稍微去规范化一点。核心数据不是表格数据库。也就是说,我建议跟踪当前列,并将数据存储在数组中。然后,根据需要将数据分离到NSManagedObject中

编辑:

让我们假设您的sqlite数据库按此顺序有三列:
firstName
lastName
middleInitial
。现在想象一下,您的CSV文件中有不同的顺序,如
lastName
middleInitial
firstName
。您可以对CSV文件或sqlite文件进行重新排序,但由于您使用的是核心数据,因此可以用另一种方式进行排序

您将拥有一个包含所有属性的实体。在我的示例中,它是“Person”实体。因此,我们继续创建这个Person实体的一个实例

Person *newPerson = [[Person alloc] initWithEntity:[NSEntityDescription entityForName:@"Person" inManagedObjectContext:context] insertIntoManagedObjectContext:context];
现在,您需要维护对这个
Person
实例的引用,以便在解析CSV时可以访问它。我推荐戴夫·德隆的。本质上,它允许对CSV文件进行基于事件的解析


当你点击一个新字段时,检查它是哪个字段号。您可以通过保持currentField变量,当您点击新行时将其重置为零,并在每个字段上递增来实现这一点。现在,当您点击一个字段时,如果数字是0或第一个字段,则设置
newPerson.lastName
。如果是第二个字段,则指定
newPerson.middleInitial
。如果点击第三个字段,则设置
newPerson.firstName
。其思想是,您可以在不接触sqlite数据库的情况下分配持久属性。如果您使用的是核心数据,这是一种方法。

csv文档有2000多篇文章和71个不同的值。因为核心数据使.sqlite列按特殊顺序排列,所以我需要更改它们,以便.csv文档中的数据按正确的顺序排列。我原以为只要按我想要的顺序拖动SQLite管理器中的列就可以了,但当我重新打开.SQLite文件时,旧的顺序就出现了。有没有一种简单的方法来更改SQLite管理器中的顺序?如果您使用的是核心数据,您不希望直接导入SQLite。请改用NSManagedObjects。你不必关心秩序,我用另一种方法解决了这个问题。我用Excel更改了.csv文件中列的顺序,然后将.csv文件导入.sqlite文件,然后将.sqlite文件导入到我的项目中。工作起来很有魅力!谢谢你的帮助,但是我不知道我是否理解你的答案。问题是我有一个.csv文件,其中以特定方式存储了大量数据。我想导入文件,而不必手动插入所有数据,这将花费很长时间。我不明白如何通过Core Data和NSManagedObjects轻松实现这一点?您不应该修改由Core Data创建的sqlite数据库,因为它们通常具有专有字段。我将用一个例子来编辑我的答案.csv文档有2000多篇文章和71个不同的值。因为核心数据使.sqlite列按特殊顺序排列,所以我需要更改它们,以便.csv文档中的数据按正确的顺序排列。我原以为只要按我想要的顺序拖动SQLite管理器中的列就可以了,但当我重新打开.SQLite文件时,旧的顺序就出现了。有没有一种简单的方法来更改SQLite管理器中的顺序?如果您使用的是核心数据,您不希望直接导入SQLite。请改用NSManagedObjects。你不需要开车