まあ、71列はたくさんあります。コアデータを使用しているので、私は少し非正規化しようと提案します。コアデータは表形式のデータベースではありません。つまり、現在の列を追跡し、配列にデータを格納することをお勧めします。次に、必要に応じてデータをNSManagedObjectsに分割します。
EDIT:firstName
、lastName
、middleInitial
:
のは、あなたのSQLiteデータベースがこの順で3つの列を持っていたことをふりをしてみましょう。 CSVファイルには、lastName
,middleInitial
,firstName
などの異なる順序でファイルがあるとします。 CSVファイルまたはsqliteファイルの順序を変更することはできますが、コアデータを使用しているため、別の方法で行うことができます。
あなたはすべてのプロパティを持つエンティティを持つ予定です。私の例では、それは "Person"エンティティです。そこで、このPersonエンティティのインスタンスを作成します。
Person *newPerson = [[Person alloc] initWithEntity:[NSEntityDescription entityForName:@"Person" inManagedObjectContext:context] insertIntoManagedObjectContext:context];
は今、あなたのCSVを解析するとき、あなたがそれにアクセスできるように、このPerson
インスタンスへの参照を維持する必要があります。私はDave DeLongのCHCSVParser libraryをお勧めします。基本的に、イベントベースのCSVファイルの解析が可能です。
新しいフィールドにヒットしたときは、そのフィールド番号を確認します。これを行うには、currentField変数を保持し、新しい行をヒットしたときにゼロにリセットし、すべてのフィールドをインクリメントします。今、フィールドをヒットしたとき、数値が0または最初のフィールドの場合は、newPerson.lastName
と設定します。 2番目のフィールドの場合は、newPerson.middleInitial
を割り当てます。 3番目のフィールドにヒットした場合は、newPerson.firstName
と設定します。考え方は、sqliteデータベースに触れることなく永続プロパティを割り当てることができるということです。コアデータを使用している場合は、この方法があります。
.csv-documentには2000を超える投稿と71の異なる値があります。コアデータは特別な順序で.sqlite列を作成しているので、.csv-文書のデータが正しい順序で来るように変更する必要があります。 SQLite-Managerのカラムを必要な順番にドラッグするだけで、これが簡単になると思っていましたが、.sqliteファイルを再オープンすると古いオーダーが表示されます。 SQLiteマネージャーで順序を変更する簡単な方法はありませんか? – xqtr
コアデータを使用している場合は、sqliteに直接インポートする必要はありません。代わりにNSManagedObjectsを使用してください。あなたは注文よりも気にする必要はありません。 – Moshe
私は別の方法で問題を解決しました。 Excelで.csvファイルの列の順序を変更し、.csvファイルを.sqliteファイルにインポートし、.sqliteファイルをプロジェクトにインポートしました。魅力的な作品! あなたのお手伝いをしていただきありがとうございます。問題は、特定の方法でデータが格納された.csvファイルがあることでした。私は手動ですべてのデータを挿入することなく、ファイルをインポートしたいと思っていました。コアデータとNSManagedObjectsを使って簡単な方法でこれをどうやってやるべきか分かりません。 – xqtr