0

私の iOS アプリには、PostgreSQL データベースから引き継がれたモデルがあります。アプリケーションには、将来さらに複雑になる可能性のあるレポート機能があります。また、ローカル アプリ データを PostgreSQL データベース サーバーと同期する必要がある場合もあります。

これまで、データの読み取り、書き込み、および削除に CoreData オブジェクトを使用してきました。CoreData 言語を使用するように SQL クエリを翻訳してきましたが、一部の言語では不必要に面倒であることがわかりました。

select sum(amount), date from db.table group by date;

これは 1 つの例にすぎず、アプリケーションは将来、より複雑なレポート クエリを必要とする可能性があります。そのため、CoreData から SQLite を直接クエリするように切り替えることを考えています (既に作成されたクエリを使用して PostgreSQL DB をクエリできます)。

私の質問は次のとおりです。

  • レポートがアプリケーションのコア機能であることを考えると (つまり、重要な SELECT クエリが必要になります)、SQL クエリの代わりに CoreData を使い続ける価値はありますか?
  • 同じストレージで SQL (複雑な SELECT クエリ用) と CoreData (残りのアプリケーション用) の両方を使用することは可能でしょうか?
4

2 に答える 2

1

構文を理解したら、CoreData に移ります。大きな違いは、SQL ステートメントを次のようなものに置き換えることです。

 // Retrieve the entity from the local store -- much like a table in a database
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"AppSettings" inManagedObjectContext:managedObjectContext];
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:entity];


// Set the predicate -- much like a WHERE statement in a SQL database
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"version == %@", @"Default"];
[request setPredicate:predicate];


// Set the sorting -- mandatory, even if you're fetching a single record/object

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"version" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
sortDescriptors = nil;
sortDescriptor = nil;

// Request the data -- NOTE, this assumes only one match, that 
// yourIdentifyingQualifier is unique. It just grabs the first object in the array. 
AppSettings *appSettings1 =[[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0];

request = nil;


//Update the object
appSettings1.backGroundImage = [NSNumber numberWithInt: backGroundGraphics.selectedSegmentIndex];

これが、開発者セクションの下のMACアプリストアにもツールがあることを願っています.Core Data Editorは常に1回使用するのに本当に役立ちます.

いつでも SQL を直接使用できますが、コア データ フィールドのデータ ストア構造は少し変に見えます。

于 2012-09-27T10:56:27.990 に答える
1

同じ理由でコア データを削除しました。かなり複雑なクエリがいくつかあり、コア データで使用するために変換するのは大変でした。私の意見では、純粋な SQLLite に固執し、手動で SQL を書き出す方法です。または、FMDB を SQLlite のラッパーとして使用できますhttps://github.com/ccgus/fmdb

于 2012-09-27T10:59:20.220 に答える