当前位置: 首页 > news >正文

3 分钟快速上手 Realm+JSON:CocoaPods 安装与第一个 JSON 模型入库教程

3 分钟快速上手 Realm+JSON:CocoaPods 安装与第一个 JSON 模型入库教程

【免费下载链接】Realm-JSONA concise Mantle-like way of working with Realm and JSON.项目地址: https://gitcode.com/gh_mirrors/re/Realm-JSON

Realm+JSON 是一个简洁、Mantle 风格的 Objective-C 库,专门用来打通Realm 数据库JSON 数据之间的转换。对新手来说,它最大的价值在于:你只需要写一个模型类,再调用一行方法,就能把服务端返回的 JSON 数组或字典一键入库,完全不用手动逐字段赋值。这篇教程将带你完成 Realm+JSON 的 CocoaPods 安装,并写出你的第一个 JSON 模型入库 Demo,全程约 3 分钟。

一、为什么你需要 Realm+JSON?

在日常 iOS 开发中,从接口拉取 JSON 再存入本地数据库是最常见的需求。传统写法往往是这样:

  • 手写NSJSONSerialization解析代码;
  • 再逐条把字典里的值赋给模型属性;
  • 遇到 snake_case 命名还要自己写转换逻辑……

Realm+JSON 把这些繁琐步骤全部封装掉了。它模仿 Mantle 的设计思路,通过映射字典(Mapping Dictionary)自动完成 JSON 与 Realm 对象之间的双向转换,让"JSON 模型入库"变成一行代码的事。

二、快速安装:CocoaPods 安装步骤

Realm+JSON 已发布到 CocoaPods 官方仓库,安装非常简单。

2.1 添加 Pod 依赖

在你的项目 Podfile 中追加一行:

pod 'Realm+JSON', '~> 0.2'

然后执行:

pod install

小提示:如果网络环境访问 CocoaPods 官方源较慢,也可以直接 clone 本仓库(地址:https://gitcode.com/gh_mirrors/re/Realm-JSON),把Realm+JSON文件夹里的源码复制进你的工程,效果相同。

2.2 引入头文件

在需要使用的地方导入:

#import <Realm+JSON/RLMObject+JSON.h>

导入这个头文件后,你的RLMObject子类就自动获得了createOrUpdateInRealm:withJSONArray:JSONDictionary等一整套 JSON 能力,声明见 RLMObject+JSON.h。

三、3 分钟上手:定义你的第一个 JSON 模型

我们以项目 Demo 中的MCEpisode(剧集)为例,定义一个简单的 Realm 模型,参考 MCEpisode.h:

@interface MCEpisode : RLMObject @property NSInteger episodeID; @property NSInteger episodeNumber; @property NSString *title; @property NSString *subtitle; @property NSDate *publishedDate; @end

就这么简单!不需要任何 JSON 相关的基类继承,模型保持"干净"。

四、配置 JSON 映射:入站与出站

Realm+JSON 的映射思路是:JSON 里的字段名 ↔ 模型里的属性名。你可以在模型类中实现两个方法来自定义映射:

4.1 入站映射(JSON → 模型)

+ (NSDictionary *)JSONInboundMappingDictionary { return @{ @"episode.title" : @"title", @"episode.description" : @"subtitle", @"episode.id" : @"episodeID", @"episode.published_at" : @"publishedDate", }; }

左边是 JSON 的 key path(支持点语法层级),右边是模型属性。这样即使接口返回的字段名与模型不一致,也能准确对应。

4.2 出站映射(模型 → JSON)

+ (NSDictionary *)JSONOutboundMappingDictionary { return @{ @"title" : @"title", @"subtitle" : @"episode.description", @"episodeID" : @"id", @"publishedDate": @"published_at", }; }

用于把模型转回 JSON 字典,方便直接拼装网络请求参数。

如果完全不写映射方法,Realm+JSON 会使用默认规则:模型属性 camelCase 自动对应 JSON 的 snake_case。

五、核心一步:JSON 一键入库

拿到服务端返回的数据后,入库只需要一行代码。Demo 中完整展示了从 AFNetworking 请求到入库的流程,见 MCTableViewController.m:

RLMRealm *realm = [RLMRealm defaultRealm]; [realm beginWriteTransaction]; NSArray *result = [MCEpisode createOrUpdateInRealm:realm withJSONArray:array]; [realm commitWriteTransaction];
  • 传入数组:createOrUpdateInRealm:withJSONArray:,批量入库;
  • 传入单个字典:createOrUpdateInRealm:withJSONDictionary:

入库方法内部会调用 Realm 原生的createOrUpdateInRealm:withObject:,性能有保障,同时利用主键自动完成"有则更新、无则插入"。

六、进阶技巧:日期转换与值转换器

JSON 里的时间字符串如何变成NSDate?枚举字符串如何变成整型?Realm+JSON 内置了值转换器机制:

  • 日期字段自动使用 MCJSONDateTransformer.m 处理;
  • 自定义枚举可用 MCJSONValueTransformer.h 配置:
+ (NSValueTransformer *)episodeTypeJSONTransformer { return [MCJSONValueTransformer valueTransformerWithMappingDictionary:@{ @"free" : @(MCEpisodeTypeFree), @"paid" : @(MCEpisodeTypePaid) }]; }

规则很简单:实现名为属性名 + JSONTransformer的方法即可,框架会自动识别并调用。

七、补充:多线程与对象拷贝

  • 多线程:Realm 规定不同线程不能共享同一个对象实例。可以用primaryKeyValue取出主键值,再到目标线程通过objectInRealm:withPrimaryKeyValue:重新查询,参考 RLMObject+JSON.h。
  • 临时副本:编辑 UI 时不想立刻写库?RLMObject+Copying提供了shallowCopydeepCopymergePropertiesFromObject:,先改副本、确认后再提交,非常适合表单类页面,声明见 RLMObject+Copying.h。

八、小结

到这里,你已经完成了 Realm+JSON 的 CocoaPods 安装、模型定义、JSON 映射配置和首个 JSON 模型入库 Demo。回顾一下核心 API:

需求调用方法
JSON 数组入库createOrUpdateInRealm:withJSONArray:
JSON 字典入库createOrUpdateInRealm:withJSONDictionary:
模型转 JSON-JSONDictionary
按主键查询objectInRealm:withPrimaryKeyValue:

Realm+JSON 用最少的代码解决了 Realm 与 JSON 之间最麻烦的转换问题。如果你正在使用 Realm 做本地缓存,这个轻量级库值得一试。下一步,不妨直接阅读 RLMObject+JSON.m 源码,深入了解它的映射实现细节!

【免费下载链接】Realm-JSONA concise Mantle-like way of working with Realm and JSON.项目地址: https://gitcode.com/gh_mirrors/re/Realm-JSON

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/1406732/

相关文章:

  • ControlNet-v1-1_fp16_safetensors 完整实战指南:29 个模型文件怎么选、怎么调、怎么避坑
  • ClimaX Docker部署实战:一条命令启动完整气象模型环境
  • ControlNet-v1-1_fp16_safetensors实战指南:从零跑通到权重精调的一站式教程
  • 马尔可夫性质解析:从核心原理到用户行为预测的工程实践
  • clb.dll丢失错误:从原理到修复的完整解决方案
  • IntelliJ IDEA集成Maven配置全攻略:从零搭建高效Java开发环境
  • Muse Glimmer-30B配置详解:从config.json读懂这个模型的核心架构
  • Conda自动补全配置全攻略:从基础到进阶,提升命令行效率
  • python练习2
  • 远程控制与gui agent
  • 单页面 mcp客户端,直接嵌入各类界面终端 包括Teamcenter AWC、Teamcenter 客户端、Teamcenter与各类CAD工具集成 - 张永全
  • pandastable常见问题解答:开发者最关心的10个疑难问题汇总
  • 流放之路Build规划神器实测:5步从零打造一个能打的Build
  • Vue DevTools开发版构建指南:解决Vue 3版本兼容性问题
  • Realm+JSON 如何优雅处理嵌套对象与数组关系?一篇讲透
  • 阅读APP书源怎么导入?Yuedu书源三步配置攻略,帮你解锁小说自由
  • IntelliJ IDEA许可证过期全攻略:从诊断到解决的合法路径
  • Upscayl Mac 使用教程:三步准备、五步出图,新手友好的 AI 图像放大指南
  • 从零到出图:ESP32-Camera驱动库实战指南,三小时让你的板子看见世界
  • EAV模型深度解析:灵活数据库设计原理、实战优化与适用场景
  • FlexNet Licensing故障排查:从原理到实战解决“not running”错误
  • PyQt-Frameless-Window 是什么?跨平台无边框窗口库完全指南
  • Java继承机制深度解析:从多态原理到内存模型与面试实战
  • Nacos配置中心从入门到精通:微服务配置治理实战指南
  • PowerShell 调 .cmd 时 URL 在 处被截断?三种稳妥解法
  • 大数据岗位技术栈全解析:数据工程师、分析师与科学家的核心技能
  • 零门槛把 Obsidian 变成时间轴日历:Obsidian Day Planner 日程管理 10 分钟上手指南
  • MySQL 的事务隔离级别(重点面试题)
  • 嘉兴装修公司市场实力盘点,2026哪些品牌综合实力更稳? - 优企甄选
  • 打造专属车牌识别模型:EasyPR-Java自定义数据集训练实战