如何使用 FMDB 将图像(字节)保存和检索到 SQLite(blob)?

2023-12-02

我正在制作一个 iOS 应用程序,需要显示来自远程站点(来自 URL)的一些图像,每次用户进入应显示图像的屏幕时,应用程序都会冻结,直到下载完成。所以我想将已经下载的图像存储到名为 COVERS 的 SQLite 表中。

这是我如何下载和显示图像的代码:

假设 movieCover 是UI图像视图并且对象电影有一个NSURL名为 cover 的属性包含要下载的图像的 URL。

NSData *cover = [[NSData alloc] initWithContentsOfURL:movie.cover];
movieCover.image = [[UIImage alloc] initWithData:cover];

但是,我想把它改成这样:

NSData *cover = [appDelegate.dataBase getCoverForMovie:movie];
if( !cover ) {
    cover = [[NSData alloc] initWithContentsOfURL:movie.cover];
    [appDelegate.dataBase setCover:cover ToMovie:movie];
}

movieCover.image = [[UIImage alloc] initWithData:cover];

假设appDelegate是当前ViewController的属性,dataBase是AppDelegate的属性,AppDelegate使用FMDB来操作DataBase中的数据。

我需要使用以下方法获取之前保存在数据库中的封面:

- (NSData *)getCoverForMovie:(Movie *)movie;

但是,如果没有保存封面,则返回零。

所以我需要使用该方法保存封面

- (BOOL)saveCover:(NSData *)cover ForMovie:(Movie *)movie;

但我不知道如何编写这个方法。需要一些帮助。


基于fmdb.m示例的方法实现

- (NSData *)getCoverForMovie:(Movie *)movie
{
    NSData *cover = nil;

    FMDatabase *db = [FMDatabase databaseWithPath:databasePath];

    [db open];
    FMResultSet *results = [db executeQueryWithFormat:@"SELECT * FROM COVERS WHERE movie = %i", movie.movieID];

    if([results next])
    {
        cover = [results dataForColumn:@"cover"];
    }

    return cover;
}


- (BOOL)saveCover:(NSData *)cover ForMovie:(Movie *)movie
{
    BOOL result;

    FMDatabase *db = [FMDatabase databaseWithPath:databasePath];

    [db open];

    result = [db executeUpdate:@"INSERT OR REPLACE INTO COVERS (movie, cover) VALUES (?,?)", movie.movieID, cover];

    return result;
}

感谢@ccgus 的回答。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 FMDB 将图像(字节)保存和检索到 SQLite(blob)? 的相关文章

  • iOS 上的 UIBezierPath 操作

    我从一条直线开始 我希望用户能够触摸并拖动该线 使其弯曲 实际上 他们有能力将线条操纵成波浪形状 我不确定从技术上实现这一目标的最简单方法 我首先创建了三次曲线的 UIBezierPaths 数组 目的是操纵控制点 但似乎一旦绘制了 UIB
  • 在 IOS 上使用 AVComposition 混合两个音频文件

    我正在尝试混合两个音频文件 将一个音频文件放在另一个音频文件之上 不是缝合在一起 但我在 IOS 上学习 AVFoundation 时遇到了困难 我在这里遵循了这个答案 如何使用 AVMutableCompositionTrack 合并音频
  • 从命令行调试 iOS 应用程序构建

    我正在通过命令行构建 iOS 应用程序 但在调试它时遇到问题 如果我使用 XCode 进行构建 它会让我在设备上 构建和调试 而不会出现任何问题 但现在 我不知道如何使用 gdb 在设备上启动它并逐步执行它 如果我尝试 添加自定义目标 可执
  • 为什么我不能在 Realm 属性上使用 private

    我正在尝试在 RealmSwift 中存储一个枚举案例 但 Realm 不支持枚举 本文 https medium com it works locally persisting swift enumerations with realm
  • 导入已经创建的sqlite数据库(xamarin)

    我正在使用 Xamarin 想知道如何导入我已经创建的 sqlite 数据库 到目前为止 我已将其添加到资产文件夹中 但不知道下一步从哪里开始 string localPath Path Combine System Environment
  • 在iOS上,“添加到主页”缓存保存在哪里,如何清除它?

    我正在 iPad iOS v7 上制作一个 html5 游戏 当我将其添加到主页时 它非常顽固地释放缓存 如果我在 Safari 中查看它 这会按照您所期望的方式工作 如果我刷新一次或两次 页面就会以最新状态缓存 但在主页上却是另一回事 它
  • 错误域=AVFoundationErrorDomain代码=-11814“无法记录”

    它不断给我错误 错误域 AVFoundationErrorDomain代码 11814 无法记录 我不确定问题是什么 我试图在拍照后计数器达到 1 时录制声音 static int counter counter will always b
  • iOS 滚动视图允许滚动过去的内容

    我正在努力优化我的应用程序以适应横向和较小的屏幕 我主要使用滚动视图来实现这一点 在我的其中一个视图中 我有一个容器视图 当我在故事板中的设备之间切换时 这个容器视图看起来很完美 容器视图映射到具有滚动视图的视图控制器 该滚动视图的顶部 底
  • 进入前台后刷新数据

    更改默认设置后 我想在AppDelegate中进入前台时刷新myViewController的数据 我所做的是 AppDelegate m void applicationDidFinishLaunching UIApplication a
  • 检测 AvPlayer 何时切换比特率

    在我的应用程序中 我使用 AVPlayer 通过 HLS 协议读取一些流 m3u8 文件 我需要知道在流会话期间 客户端切换比特率多少次 我们假设客户端的带宽正在增加 因此客户端将切换到更高比特率的段 AVPlayer能检测到这个开关吗 T
  • 我的游戏中应该有多少个视图控制器?

    我开始使用 spritekit 构建我的第一个游戏 现在我只有一个视图控制器来呈现开始屏幕场景 override func viewDidLoad super viewDidLoad let scene StartScreenScene C
  • 我怎样才能勾勒出文本字体?

    我想在边框 轮廓 中显示另一种颜色的文本 我正在尝试使用在 MapOverlayView 中显示文本 text drawAtPoint CGPointMake 0 30 withFont UIFont fontWithName Helvet
  • UICollectionView 拖放文件夹创建

    我正在使用 UICollectionView 创建 iOS 画廊应用程序 我希望用户能够拖放图像来重新排序图库并创建文件夹 类似于 iPhone 上的主屏幕 我发现了以下内容tutorial http nshint io blog 2015
  • iOS 循环对象的属性并添加操作

    我有一个具有几个类似属性的类 UISliders 我想添加用户开始和结束使用每个滑块时的操作 每个滑块都将链接到同一个选择器 因此我考虑只是迭代它们 而不是编写 10 个几乎相同的代码块 问题是 最有效的方法是什么 我尝试过这样的事情 在运
  • 在现有 iOS 应用程序中集成 React-native(0.40.0) 后找不到 Yoga/Yoga.h 头文件

    在我的 Swift iOS 应用程序中集成 React Native 后 我无法构建 yoga Yoga h file cannot be found 我已经浏览了文档 查看了react native github页面 检查了类似问题的SO
  • 拖动时获取MKAnnotation的坐标

    我正在根据用户添加的注释的位置创建一条路径 MKPolyline 我想允许用户通过拖动引脚来更改路径 我目前可以做到这一点 但 MKPolyline 不会更新 直到引脚被放下 我实施了 void mapView MKMapView mapV
  • 为什么我的视图仍然以横向呈现?

    我的视图是由导航控制器控制的 因此我将导航控制器支持的方向设置为明确的纵向和纵向UpSideDown 这可以工作 但是如果调用视图时前一个视图处于横向状态 它将以横向方式呈现并保持横向状态 直到设备旋转 如何防止这种情况发生 这是我的代码
  • 苹果企业程序分发问题[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 这个问题涉及到Apple iOS 开发者企业计划 http developer apple com programs ios enterprise 我
  • 使用基于约束的布局自动调整 NSTokenField 的大小

    有没有办法自动调整大小height使用约束的 NSTokenField 保持宽度恒定 sizeToFit应该有效 但事实并非如此 如果我设置一个约束来保持宽度不变并调用此方法 它将忽略约束并仅调整宽度大小 当我想要的是仅调整高度大小时 基于
  • 为什么使用 iPhone 或 iOS 设备在“iframe”中查看“position:fixed”时不起作用?

    我研究过 stackoverflow 似乎position fixed在 iOS 移动设备的 iframe 中 https stackoverflow com questions 15874910 position fixed and if

随机推荐

  • libz.so.1:无法打开共享对象文件

    我在 ubuntu 12 04 上遇到一个问题 usr lib ndk android ndk r8c toolchains arm linux androideabi 4 6 prebuilt linux x86 bin lib gcc
  • 将数据从服务传递到组件 --> 子组件

    简而言之 我正在使用这个Plunker我有一个场景 我必须通过从服务读取元素数据来动态创建控件 因此 当我从服务读取数据时 它是异步的 但是我必须根据从服务接收的数据创建一些具体对象并将其传递给子组件 所以这是我的逻辑 主要组件的 Html
  • 动态添加视图到Horizo​​ntal LinearLayout 超出屏幕

    我必须动态创建文本视图和编辑文本 并将其插入已在 XML 文件中声明的线性布局 水平 内 要插入的文本视图和编辑文本的数量动态变化 我正在动态创建视图并将其添加到线性布局中 但问题是 如果视图数量更多 它会移出屏幕 尽管进入下一行 我应该做
  • 使用 QComboBox 选择显示的不同小部件集

    我正在开发一个左侧有工具栏的图像查看器 由于我有很多措施要做 但希望将大部分显示用于图片并保持工具栏较薄 所以我想使用combo box1 and combo box2选择工具栏中显示的不同小部件 示例1 如果我选择measurements
  • 使用 PDO 获取 MySQL 服务器版本

    我正在 Laravel 5 中构建一个应用程序 我需要确保我的一个表能够执行全文搜索 我想检测 MySQL 版本号 确保它至少为 5 6 10 或更高版本 以便如果该条件失败 我可以在给定表的迁移文件中将引擎切换到 MyISAM 我似乎找不
  • php/Ajax - 预加载图像的最佳实践

    我编写了一个非常类似于 flickr 照片流功能的脚本 两个缩略图彼此相邻 当您单击下一个或上一个链接时 下一个 或上一个 图像会滑入 酷 目前 当页面加载时 它会加载两个图像 第一次使用 nxt prv 时 接下来的两个图像或前两个图像将
  • 证明匹配类型解析为特定的具体类型

    我正在尝试创建一个使用匹配类型的特征的实现 其中该匹配类型的右侧是预先已知的 但是 我似乎无法让编译器接受我的 证明 这对我来说很新 如果这真的很明显 我很抱歉 有人可以帮助我了解我是否 如何能够实现我想要的吗 这是一些最小的代码 Scas
  • C++ 中的移动构造函数和复制构造函数

    我的理解是 当我们从函数返回本地对象时 如果移动构造函数存在 则会调用它 但是 我遇到了调用复制构造函数的情况 如以下函数中的示例所示foo2 为什么会发生这种事 include
  • 如何更改 OpenCV 应用程序中轨迹栏的位置?

    通常在我的 OpenCV 项目中 创建轨迹栏并将其放置在窗口中后 它会水平显示在窗口底部 是否可以更改轨迹栏的位置和方向 很不幸的是 不行 cv createTrackbar 不允许更改轨迹栏的位置和方向 但是如果你安装了 Qt 你可以创建
  • 忽略 JSON.NET 数据解析期间的解析错误

    我有一个具有预定义数据结构的对象 public class A public string Id get set public bool Enabled get set public int Age get set JSON 应该是 Id
  • 对 UITableViewCell 的accessoryView 使用自定义图像并让它响应 UITableViewDelegate

    我正在使用自定义绘制的 UITableViewCell 包括与单元格相同的accessoryView 我对accessoryView的设置是通过这样的方式进行的 UIImage accessoryImage UIImage imageNam
  • 将 C# 模型从视图传递到 Javascript

    我将此 ViewModel 传递给我的视图 public class DashboardViewModel public List
  • 不使用数据透视表根据每日数据计算月平均值

    我的工作表包含两列 A 列包含以下格式的日期dd mm yyyyB 列包含每日数据 根据每日数据 我必须在没有数据透视表的情况下生成每个月的月平均值 有些日子根本不包含任何数据 我无法使用数据透视表 因为我必须在稍后阶段使用月平均值来识别每
  • 级联删除表的子记录

    我有一个包含列 id 名称和parentid 的表 模型中的关系函数 location parent gt array self BELONGS TO Location parentid location children gt array
  • 使用 CSS 将非等宽字体强制设置为固定宽度

    有没有办法使用 CSS 强制字体为等宽字体 我的意思是 使用非等宽字体 您可以强制浏览器以固定宽度呈现每个字符吗 如果这是为了对齐表格中的数字 其中某些字体 使用传统排版 默认以可变宽度呈现它们 例如 Windows 上的 Segoe UI
  • NSLog - 如何打印对象名称?

    考虑 NSString myString Welcome NSLog myString 将打印Welcome在控制台中 我可以打印字符串 myString Welcome 我的意思是 我可以获得对象名称 myString 以及对象值 Wel
  • 在此示例中如何从目标列表中获取所有值

    我找到了这个example有两个JLists 我怎样才能从目的地获得所有值JList 我是Java新手 我想从第二个列表中获取所有值来进行一些测试来研究 import java awt BorderLayout import java aw
  • 是否可以使用行号和列号进行 SQL 更新? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在使用 jquery
  • Java mapToInt 与使用 Map 进行Reduce

    我一直在阅读有关reduce的文章 刚刚发现有一个3参数版本 基本上可以像这样执行map缩减 String strarr abc defg vwxyz System out println Arrays stream strarr redu
  • 如何使用 FMDB 将图像(字节)保存和检索到 SQLite(blob)?

    我正在制作一个 iOS 应用程序 需要显示来自远程站点 来自 URL 的一些图像 每次用户进入应显示图像的屏幕时 应用程序都会冻结 直到下载完成 所以我想将已经下载的图像存储到名为 COVERS 的 SQLite 表中 这是我如何下载和显示