【问题标题】:How create separate sqlite file with self model如何使用自我模型创建单独的 sqlite 文件
【发布时间】:2012-08-04 16:02:56
【问题描述】:

我已经阅读了这篇文章Core Data with mutiple sqlite files 和其他一些内容。

但是没有找到任何关于创建分隔的 sqlite 文件的可理解信息(例如为不同的用户存储一些数据)。这就是我正在做的:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    if (__persistentStoreCoordinator != nil)
    {
        return __persistentStoreCoordinator;
    }
    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:[NSString stringWithFormat:@"%@.sqlite", _userID]];


    __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

    NSError *error = nil;
    if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }
    return __persistentStoreCoordinator;
}

- (NSManagedObjectModel *)managedObjectModel {
    if (__managedObjectModel != nil) {
        return __managedObjectModel;
    }

    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"DataBase" withExtension:@"momd"];
    __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    return __managedObjectModel;
}

- (NSManagedObjectContext *)managedObjectContext
{
    if (__managedObjectContext != nil)
    {
        return __managedObjectContext;
    }

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];

    if (coordinator != nil)
    {
            __managedObjectContext = [[NSManagedObjectContext alloc] init];
            [__managedObjectContext setPersistentStoreCoordinator:coordinator];   
    }
    return __managedObjectContext;
}

如果您更改用户也更改NSPersistentStoreCoordinatorNSManagedObjectContextNSManagedObjectModel - 不是(有NSFetchRequest)。那么如何在不创建额外实体(如用户)的情况下为不同用户分离核心数据(包括自身数据和“获取请求”)?

【问题讨论】:

    标签: objective-c ios core-data nsmanagedobjectcontext nspersistentstore


    【解决方案1】:

    也许您可以将多个上下文与它们自己的商店一起使用,但要基于相同的数据模型。通过这种方式,您可以为不同的商店使用相同的实体。

    【讨论】:

    • 就像在你的代码中一样,只有几次:persistenStoreCoordinator1, managedObjectContext1; persistenStoreCoordinator2, managedObjectContext2;等
    • 你读过我写的吗?你不理解我,我想……我不需要一次开多家商店!我不需要任何 1,2,3... 变量!因为persistenStoreCoordinator 和managedObjectContext 随时被释放并且产生不同的storeURL。 IE。输入一个用户(使用他的 storeURL)并注销,然后输入另一个用户(使用其他 storeURL)。我需要分离他们的数据
    • 如果一切正常,那么“第一个”用户可以看到所有数据,但其他人什么都看不到(他们更改的所有内容都只显示给“第一个”用户)
    猜你喜欢
    • 2016-01-02
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 2020-09-10
    • 2011-10-09
    • 1970-01-01
    相关资源
    最近更新 更多