我的iOS应用程序有一个从PostgreSQL数据库继承的模型。该应用程序具有报告功能,有可能在将来变得更加复杂。此外,可能需要将本地应用程序数据与PostgreSQL数据库服务器同步。
到目前为止,我已经使用CoreData对象来读取,写入和删除数据。我一直在翻译SQL查询以使用CoreData语言,但发现它们中的一些不必要地繁琐,例如:
select sum(amount), date from db.table group by date;
这只是一个示例,应用程序将来可能需要更复杂的报告查询。因此,我正在考虑从CoreData切换到直接查询SQLite(我可以使用已编写的查询来查询PostgreSQL DB)。
我的问题是:
答案 0 :(得分: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应用商店中也有工具,真正帮助核心数据编辑器一直使用。
您可以直接使用SQL,但数据存储结构在核心数据字段中看起来有点滑稽。
答案 1 :(得分:1)
我出于同样的原因删除了核心数据,我有一些非常复杂的查询,并且在转换为核心数据使用时,这是一个太大的痛苦。坚持使用纯SQLLite并手动编写SQL是我认为的方法。或者,您可以将FMDB用作SQLlite https://github.com/ccgus/fmdb
的包装器