0

我正在尝试使用配置来管理核心数据中的瞬态实体。

  • 首先,我创建了 2 个名为“Persistent”和“Transient”的 coredata 配置。
  • 然后,我创建了实体,并将它们与正确的配置相关联,具体取决于实体是否可持久。
  • 最后,使用persistentStoreCoordinator,我创建了一个Sqlite 类型的持久存储并将其链接到“Persistent”配置。我还创建了一个内存类型的持久存储并将其链接到“瞬态”配置。

测试:我启动iphone模拟器,我的应用程序启动成功。我关闭模拟器并在数据库文件上启动 sqlite3。我列出了表( .tables 命令),我可以看到已经为我的临时实体创建了一些表 => 所以,它不起作用。

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    NSLog(@"++++++++ persistentStoreCoordinator");

    if (_persistentStoreCoordinator != nil) {
        return _persistentStoreCoordinator;
    }

    NSURL *persistStoreURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"ProjectToDelete.sqlite"];

    NSMutableDictionary *sqliteOptions = [NSMutableDictionary dictionary];
    [sqliteOptions setObject:@"WAL" forKey:@"journal_mode"];

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                             [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
                             sqliteOptions, NSSQLitePragmasOption,
                             nil];

    NSError *error = nil;
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:@"Persistent" URL:persistStoreURL options:options error:&error]) {

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSInMemoryStoreType configuration:@"Transient" URL:[NSURL URLWithString:@"memory://store"] options:nil error:&error]) {

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    return _persistentStoreCoordinator;
}
4

2 回答 2

0

我认为您正在混合 CoreData 的不同概念。

CoreData 不是 ORM,而是管理对象及其关系的对象图。

您可以在实体上具有瞬态属性,这些属性不会成为表示该实体的表中的列,仅在运行时生成,而对象在内存中。

抽象实体永远不会被实例化,如果您有很多从一个超级对象继承的对象,通常会使用它们,即员工管理系统可能有一个抽象的个人实体,而员工、经理、董事和经理都是继承自 Person

于 2013-02-27T19:57:33.303 回答
0

正如评论中提到的,尝试通过模型编辑器配置数据存储是行不通的。这些配置可以让您添加预定的提取,但它们不允许您配置数据的存储位置。这是使用任何这些方法的关键。如博客文章中所述,您将需要添加一些代码,以正确使用任何这些技术。

于 2013-03-01T10:18:12.173 回答