繁体   English   中英

核心数据:使用图像预填充SQLite实体

Core Data: Pre-populate SQLite Entity with Image

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我已经通过先通过核心数据创建数据库,然后使用SQLite Manager填充该初始化文件来为我的应用程序预先填充数据。 是否可以预填充SQLite表中的图像以用于核心数据?

我最初的想法是通过SQLite Manager将图像作为Blob插入。 然后根据这篇文章 ,看来我需要将类型设置为二进制并使用UIImage initWithData:导入。

这可行吗?如果可以,这是否合适?

2 个回复

将图像预填充到SQLite数据库中以与Core Data一起使用非常简单。

  1. 首先配置您的Core Data应用程序,实现您的属性以将图像包含为“二进制”类型。 使用应用程序模拟器中的Core Data构建应用程序并导航到您的视图。 这将根据需要与Core Data一起使用初始化SQLite数据库(假设您已按照以下方式实现了persistentStoreCoordinator)。
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
    if (persistentStoreCoordinator != nil) {
        return persistentStoreCoordinator;
    }
    NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"YourDBName.sqlite"];

    // Set up the store.
    // For the sake of illustration, provide a pre-populated default store.

    NSFileManager *fileManager = [NSFileManager defaultManager];
    // If the expected store doesn’t exist, copy the default store.
    if (![fileManager fileExistsAtPath:storePath]) {
        NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"YourDBName" ofType:@"sqlite"];
        if (defaultStorePath) {
            [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
        }
    }

    NSURL *storeUrl = [NSURL fileURLWithPath:storePath];
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 
                             [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, 
                             nil];
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];

    NSError *error;
    if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
        // Update to handle the error appropriately.
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        exit(-1);  // Fail
    }
    return persistentStoreCoordinator;
}
  1. 导航到“用户//库/应用程序支持/ iPhone模拟器/用户/应用程序/”中的应用程序数据。 如果按“修改日期”对文件夹进行排序,则您的应用程序将具有最新日期(假设您同时没有构建任何其他应用程序)。 输入应用程序文件夹,初始化的<YourDBName.sqlite>将驻留在Documents文件夹中。 将SQLite数据库复制到另一个位置(例如您的桌面)并删除原始文件(这是允许Core Data重新加载要创建的预填充SQLite数据库所必需的)。

  2. 用您喜欢的SQLite编辑器打开<YourDBName.sqlite>(适用于Firefox的SQLite Manager插件是一个适当的免费选项)。 在表中添加条目,将所有图像插入为“ BLOB”。

  3. 在XCode中,添加<YourDBName.sqlite>作为现有文件。 如果下一次启动应用程序,Core Data会将其复制到应用程序数据文件夹中(如果该文件尚不存在)(您删除了原始权限吗?)。

  4. 使用[UIImage imageWithData:< DataObject >.< ImageAttributeName >在代码中访问预先填充的图像[UIImage imageWithData:< DataObject >.< ImageAttributeName >

您的图片有多大? 如果它们很大,则可以通过将映像存储在文件系统中并在核心数据中保留对其位置的引用来更好地服务。

如果图像将始终存在于您的应用程序中,则可以将其与捆绑包打包在一起。 如果不是这样(例如,用户可以删除不需要的图像),则可能必须在首次使用时依靠拉入图像。

1 与预填充sqlite的核心数据关系

首先,对不起。 我不擅长英语。 你好 我是iOS的初学者。 目前,我正在这样开发: 删除自动生成的核心数据sqlite文件 使用firefox sqlite管理器将我创建的sqlite文件复制到已删除的sqlite文件路径 (使用Z_PK,Z_ENT,Z_OPT ...

2 从JSON到核心数据的预填充其他实体

我设法通过JSON文件预先填充了一个核心数据模型,该模型由一个具有许多属性的实体组成。 然后,我添加了第二个实体,并在使用相同的JSON文件预填充该实体时遇到了问题,所以我想我将创建另一个JSON文件来预填充第二个实体,但这似乎没有用。 下面的代码是我尝试使用的代码: 将不胜 ...

3 具有预填充.sqlite的核心数据(Swift3)

目前我正在研究现有iOS9应用程序的Swift3 / iOS10更新,该应用程序为欧洲各地的电动汽车存储约10,000个充电点。 到目前为止,我总是使用预先填充的数据库(.xcappdata包中的.sqlite,.sqlite-shm,.sqlite-wal文件)发送应用程序,但是使用当前版本 ...

4 来自CSV的预填充sqlite的核心数据!

我已经为此苦苦挣扎了两天,在搜寻互联网之后,我仍然无法正常工作。 我有一个csv文件,我需要从中填充一个sqlite db以与核心数据一起使用。 我以为我在这里找到了解决方案http://ablogontech.wordpress.com/2009/07/13/using-a-pre-p ...

5 使用Django使用核心数据预填充SQLite数据库

我想使用Django作为前端数据输入输入器来构建一个预填充的sqlite数据库; 但是,我已经阅读了这个网站,并且在StackOverflow上阅读起来并不容易。 并且需要使用CSV文件。 如果您的数据库很小,那很好-但是如果您用具有关系的数据(即:客户,订单,销售人员等)预填充数据库 ...

6 sqlite文件没有填充tableView - 它可以使用简单的数据 - ? (sqlite,核心数据,预填充数据)

我有一个预先填充好的sqlite文件,我将其复制到我的项目中(在文件夹中,并进入xcode项目窗口) 当我用终端检查sqlite文件时,它工作正常,我的sqlite文件中有正确的数据。 但后来我尝试用sqlite文件中的数据填充我的tableView,但tableView仍然是空的。 ...

7 将 sqlite 预加载到核心数据

我试图在第一次运行时使用sqlite文件将数据预加载到核心数据。 我首先创建了一个xcdatamodeld文件,然后使用 python 生成了sqlite数据库,该数据库与我所说的xcdatamodeld具有完全相同的数据结构。 当我尝试加载数据库时出现错误说 这是我用sqlite3运行的代 ...

8 使用方法预填充核心数据

我为我的Core Data子类创建了一个扩展,在这里我实现了一个预先填充表的方法,首先我检查表中是否有任何内容,然后插入一些值,但是当我进行提取时出现错误: 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因: 'executeFetchReque ...

9 仅使用一个托管对象预填充核心数据

我只需要用一个托管对象预先填充我的核心数据库。 目前,我正在检查AppDelegate是否是应用运行的第一时间,然后添加一个对象,如下所示: insertManagedObject方法检查insertManagedObject是否已在数据库中。 它工作正常,但是我担心将来的应 ...

10 使用预填充的核心数据部署应用程序

我正在尝试发布已填充Core Data应用程序。 我找到了一些链接,他们解释了如何做,但要么不起作用,要么答案很旧。 我关注了这篇文章,但它不起作用。 解决方案可能是将.sqlite文件导入 app 文件夹,然后将它们复制到设备的文件系统,但我不知道该怎么做。 有什么方法可以用现有的实体和记录预先填 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM