0

我的 iOS 应用程序有一个从 PostgreSQL 数据库继承的模型。该应用程序具有报告功能,未来可能会变得更加复杂。此外,可能需要将本地应用程序数据与 PostgreSQL 数据库服务器同步。

到目前为止,我已经使用 CoreData 对象来读取、写入和删除数据。我一直在翻译 SQL 查询以使用 CoreData 语言,但发现它对其中一些来说不必要的麻烦,例如:

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

这只是一个示例,该应用程序将来可能需要更复杂的报告查询。因此,我正在考虑从 CoreData 切换到直接查询 SQLite(我可以使用已经编写的查询来查询 PostgreSQL DB)。

我的问题是:

  • 考虑到报告是应用程序的核心功能(即需要非平凡的 SELECT 查询),继续使用 CoreData 而不是 SQL 查询是否值得?
  • 将 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 一直是一种用途。

您始终可以直接使用 SQL,但数据存储结构与 Core Data 字段看起来有点滑稽。

于 2012-09-27T10:56:27.990 回答
1

出于同样的原因,我删除了核心数据,我有一些非常复杂的查询,翻译为核心数据使用实在是太痛苦了。在我看来,只需坚持使用纯 SQLLite 并手动编写 SQL 即可。或者,您可以使用 FMDB 作为 SQLlite 的包装器https://github.com/ccgus/fmdb

于 2012-09-27T10:59:20.220 回答