以编程方式获取Core Data实体描述

时间:2014-04-26 07:43:05

标签: ios objective-c core-data

我有一个使用核心数据的应用。如何以编程方式获得实体的描述,即SQL创建代码,如:

CREATE TABLE Cities(cityName TEXT);

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

NSEntityDescription *desc = [NSEntityDescription entityForName:@"Cities" inManagedObjectContext:context];

希望这有帮助。

答案 1 :(得分:1)

我不确定你为什么要这样做,实际上,你可能不想这样做,但你可以用这样的东西(使用FMDB https://github.com/ccgus/fmdb)来做:

NSString *dbPath = @"/path/to/my/CoreData/repository.sqlite"; // use NSBundle for actual code
NSString *entityName = @"Cities";
NSString *tableName = [NSString stringWithFormat:@"Z%@", [entityName uppercaseString]];
FMDatabase *database = [FMDatabase databaseWithPath:dbPath];
if (database.open) {
    NSString *query =  [NSString stringWithFormat:@"SELECT sql FROM sqlite_master WHERE name = '%@';", tableName];
    FMResultSet *results = [database executeQuery:query];
    while([results next]) {
        NSString *sql = [results stringForColumnIndex:0];
        return sql;
    }
}

当然,这假设您的CoreData应用程序使用SQLite存储库(通常情况下)。

以下是我的一个名为FormInstance的实体:

CREATE TABLE ZFORMINSTANCE ( Z_PK INTEGER PRIMARY KEY, Z_ENT INTEGER, Z_OPT INTEGER, ZDEF INTEGER, ZCREATED TIMESTAMP, ZSENT TIMESTAMP, ZIDENTIFIER VARCHAR, ZLABEL VARCHAR, ZUSER VARCHAR )

该实体具有以下属性:

created
identifier
label
sent
user

这些关系:

def
roles
values

CoreData结构的映射是:

  • 不明显
  • 无证
  • 不受支持
  • 私有
  • 可能会有变化

使用风险自负