数据持久化方法——Core Data

AMD Ryzen AI NPU加速本地RAG:Windows端ONNX+DirectML实战指南 RAG(检索增强生成)是一种将大语言模型与私有知识库结合的关键技术,其核心在于低延迟、高隐私的端到端推理能力。随着NPU(神经网络处理单元)成为轻薄本标配,如何利用其确定性低功耗特性替代GPU/CPU执行RAG中的LLM推理,正成为本地AI部署的新兴刚需。AMD Ryzen AI平台搭载XDNA架构NPU,支持最高50 TOPS INT4算力,但生态碎片化严重——ROCm不支持Windows消费级设备,官方工具链缺位。本文聚焦ONNX Runtime与DirectML执行提供器的协同方案,依托已适配的amd 阅读详情

概述


Core Data是一种用来解决应用中数据持久化问题的技术。作为一个Cocoa框架,首次在Mac OS X 10.4 Tiger与iOS 3.0系统中出现。它允许按照实体-属性-值模型组织数据,并以XML,二进制文件或SQLite数据文件的格式将其串行化。Core Data允许用户使用代表实体和实体间关系的高层对象来操作数据。它也可以管理串行化的数据,提供对象生存期管理与object graph管理,包括存储。Core Data直接与SQLite交互,避免开发者使用原本的SQL语句。
CoreData的核心概念是托管对象。托管对象是由Core Data管理的简单模型对象,但必须是NSManagedObject类或者其子类的实例。托管对象模型包含一些应用程序托管对象实体的描述,描述中包括属性,关系等。

Core Data中常用的类




Core Data 的初步建立

首先导入框架


创建模型编辑器


这里我想建立三个实体,分别是Car,User和Dealer 在创建好实体后再分别添加属性


高亮选择后可以自动创建对应的类文件


然后我们可以从Style模式里看到我们建立的实体的ER图


建立模型对象类

为了方便管理和使用模型对象,我把有关方法统一建立在了CarModel类中

后面涉及到的主要有:
@property (nonatomic, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;
@property (nonatomic, readonly) NSManagedObjectContext *managedObjectContext;

- (NSURL *)dataStoreURL;
- (Car *)makeNewCar;
- (NSArray *)carListAfterFetch;

返回数据存储的URL函数

- (NSURL *)dataStoreURL
{
    static NSString *fileName = @"Car.sql";
    NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];    
    NSString *filePath = [docDir stringByAppendingPathComponent:fileName];
    NSURL *fileURL = [NSURL fileURLWithPath:filePath];
    
    return fileURL;
}


数据模型NSManagedObjectModel


- (NSManagedObjectModel *)managedObjectModel
{
    if (_managedObjectModel)
    {
        return _managedObjectModel;
    }
    _managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
    
    return _managedObjectModel;
}

使用持久化存储协调器,链接到数据模型


- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    if (_persistentStoreCoordinator)
    {
        return _persistentStoreCoordinator;
    }
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    NSError *error;
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                                                   configuration:nil
                                                             URL:[self dataStoreURL]
                                                         options:nil
                                                           error:&error])
    {
        NSLog(@"Error: %@", error);
    }
    
    return _persistentStoreCoordinator;
}


建立托管对象上下文,记录对象图的所有变化。在一些时候,可以执行抓取数据信息并进行检索等等。


- (NSManagedObjectContext *)managedObjectContext
{
    if (_managedObjectContext)
    {
        return _managedObjectContext;
    }
    _managedObjectContext = [[NSManagedObjectContext alloc] init];
    [_managedObjectContext setPersistentStoreCoordinator:[self persistentStoreCoordinator]];
    return _managedObjectContext;
}


一个创建汽车实例的方法


- (Car *)makeNewCar
{
    Car *newCar = [NSEntityDescription insertNewObjectForEntityForName:@"Car"
                                                inManagedObjectContext:[self managedObjectContext]];
    return newCar;
}


检索数据方法,返回一个数组储存目前存在的实例的信息


- (NSArray *)carListAfterFetch
{
    NSError *error;
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Car" inManagedObjectContext:[self managedObjectContext]];
    fetchRequest.entity = entity;
    
    NSArray *listOfCars = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];
    
    return listOfCars;
}

测试

在APPDelegate.m里对主要的方法进行了简单的使用

    CarModel *carModel = [[CarModel alloc] init];
    NSManagedObjectContext *carContext = [carModel managedObjectContext];
    
    Car *car1 = [carModel makeNewCar];
    car1.brand = @"BMW";
    car1.type = @"SUV";
    
    [carContext save:nil];
    
    NSArray *listOfCars = [carModel carListAfterFetch];
    
    [listOfCars enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        NSLog(@"CarInList[%i] : %@", idx, [obj brand]);
    }];
    
    Car *rollbackCar = [listOfCars objectAtIndex:0];
    rollbackCar.brand = @"AUDI";
    
    if ([carContext hasChanges]) {
        [carContext rollback];
    }
    
    listOfCars = [carModel carListAfterFetch];
    
    [listOfCars enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        NSLog(@"CarInList[%i] : %@", idx, [obj brand]);
    }];
    
    [carContext deleteObject:car1];
    [carContext save:nil];
    
    listOfCars = [carModel carListAfterFetch];
    
    if ([listOfCars count] == 0) {
        NSLog(@"NULL");
    }
    else {
        [listOfCars enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            NSLog(@"CarInList[%i] : %@", idx, [obj brand]);
        }];
    }

打印的结果是
2013-08-01 21:46:14.860 CoreDataTest[721:c07] CarInList[0] : BMW
2013-08-01 21:46:14.862 CoreDataTest[721:c07] CarInList[0] : BMW
2013-08-01 21:46:14.864 CoreDataTest[721:c07] NULL


这里使用了上下文的存储 删除 读取 回文(rollback)方法
Core Data中还有好多高级方法,如redo/undo等(重做,撤销)。

总结


Core Data看起来比使用SQL语句操作数据更快捷和对象化。但是也有很多喜欢写SQL语句的工程师,更偏爱直接操纵数据库。
总结起来Core Data的优点还是很多:
App升级之后数据库字段或者表有更改会导致crash,CoreData的版本管理和数据迁移变得非常有用,手动写sql语句操作还是麻烦一些。
CoreData不光能操纵SQLite,CoreData和iCloud的结合也很好,如果有这方面需求的话优先考虑CoreData。
提供NSFetchedResultsController 类用于管理表视图的数据。即将Core Data的持久化存储显示在表视图中,并对这些数据进行管理:增、删,改。
管理undo/redo操作。
检查托管对象的属性值是否正确。

虽然现在还不能直接设置主键,但是其已经足够强大,也相信以后将会更加便捷。

AMD平台系统集成实战:从驱动安装到PyTorch环境配置全攻略 在硬件开发和系统集成领域,驱动安装与软件兼容性是构建稳定计算环境的基础。其核心原理在于操作系统通过驱动程序与硬件进行高效通信,而芯片组驱动、显卡驱动等构成了软件栈的关键底层。这一技术价值在于确保硬件性能充分发挥,并为上层应用提供稳定运行平台。在人工智能、高性能计算等应用场景中,稳定的驱动环境是运行PyTorch等深度学习框架的前提。本文聚焦于AMD平台,针对“AMD驱动安装失败”和“AMD软件闪退”等常见热词问题,提供从BIOS设置、芯片组驱动部署、显卡驱动配置到ROCm平台下PyTorch环境搭建的完整工 阅读详情

相关推荐

Windows 11 23H2系统架构选择与安装指南

操作系统架构是计算机系统的核心基础,x64与ARM64作为当前主流架构各有特点。x64架构凭借成熟的生态体系,在性能密集型应用和专业软件兼容性上表现突出;而ARM64架构则以能效比见长,特别适合移动设备和长续航场景。Windows 11 23H2版本对ARM64进行了深度优化,通过转译层实现了x86/x64应用兼容,同时显著提升了电池续航能力。本文重点解析两种架构的技术差异,并提供详细的官方ISO下载验证方法和安装指南,帮助用户根据实际需求选择适合的系统版本。对于开发者而言,了解架构特性对开发环境配置和性能

culi4814的博客 601

Core Data 概述

Core Data 概述 转载自:http://www.cocoachina.com/newbie/basic/2013/0911/6981.html Core Data可能是OS X和iOS里面最容易被误解的框架之一了,为了帮助大家理解,我们将快速的研究Core Data,让大家对它有一个初步的了解,对于想要正确使用Core Data的同学来说,理解它的概念是非常必要的。几乎所有对C

zhenxi_20的专栏 599

AMD RX 7900 XTX + ROCm 6.4 本地运行 CodeLlama/Mistral 实战指南

大模型本地推理正从依赖CUDA的单一生态,转向开源、可控、高性价比的异构计算路径。ROCm作为AMD官方开源GPU计算平台,已实现对PyTorch、HuggingFace Transformers及主流推理框架(如LlamaFactory、vLLM)的深度适配,支撑BF16精度与AWQ量化模型在消费级显卡上的稳定部署。其技术价值在于打破CUDA垄断,降低硬件门槛,提升Linux原生环境下的工程确定性;典型应用场景包括中小团队私有化代码助手搭建、高校低成本训推一体实验、以及开发者规避驱动兼容性陷阱的生产级替代

weixin_34115824的博客 369

数据存储Android中的数据持久化技术【文件存储/SharedPreferences/SQLite数据库】

数据持久化:一种机制,是内存数据模型和存储数据模型的相互转化。Android中的瞬时数据:存储在内存中,有可能会因为程序关闭或其它原因导致内存被回收而丢失的数据。Android中常用的持久化技术1.文件存储    文件存储是Android中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动地保存到文件中的,因而它比较适合用于存储一些简单的文本数据或二进制数据1.1...

itloser.info的傻傻博客 549

WSL+PowerShell深度集成:Windows与Linux共生开发工作流

WSL(Windows Subsystem for Linux)并非Linux模拟器,而是基于轻量虚拟化与内核接口重映射的原生兼容层;其核心原理是通过WSL2运行真实Linux内核,并借助PowerShell作为统一控制中枢实现跨系统进程管理、文件互通与网络协同。这种架构赋予开发者无需双系统或传统虚拟机即可获得完整Linux运行时的能力,技术价值在于零开销调用apt、systemd、Docker等原生工具,同时保留PowerShell脚本生态与Windows生产力。典型应用场景包括混合开发调试、CI/CD流

weixin_34195142的博客 1068

别再被‘ANOMALY: meaningless REX prefix’弹窗搞懵了!手把手教你排查Python环境、杀软和系统监控的锅

本文详细解析了Windows系统中常见的'ANOMALY: meaningless REX prefix'错误,提供了从Python环境检查、杀毒软件干扰检测到系统监控软件处理的全方位排查指南。通过分层次的诊断框架和实用技巧,帮助开发者快速定位并解决这一棘手问题,提升工作效率。

weixin_28684497的博客 522

AMD显卡用户看过来:在Windows和Ubuntu 22.04上搞定OpenCL开发环境(附VS2022配置)

本文为AMD显卡用户提供详细的OpenCL开发环境搭建指南,涵盖Windows和Ubuntu 22.04双平台配置。从驱动安装、VS2022工程设置到Linux工具链部署,每个步骤均经过实机验证,帮助开发者快速解决环境搭建中的常见问题,提升开发效率。

crhwkrhpunow61910的博客 418

iOS 持久化存储之CoreData VS 直接SQlite

原创Blog,转载请注明出处 blog.youkuaiyun.com/hello_hwc 欢迎关注我的iOS SDK详解专栏 http://blog.youkuaiyun.com/column/details/huangwenchen-ios-sdk.html前言: CoreData不是DB,也不是DBMS,它是一个对象图管理工具,它的底层存储使用SQLite,XML或者其它。通常使用CoreData的时候,也会用到

Leo的专栏 9599

ExplorerPatcher Windows 11 界面定制指南:快速找回 Windows 10 任务栏与开始菜单

如果你升级 Windows 11 之后,觉得居中的任务栏不好用、开始菜单找不到"所有应用",ExplorerPatcher 是一个值得了解的开源工具:它把 Windows 10 风格的任务栏、开始菜单和 Alt+Tab 窗口切换器带回 Windows 11,通过一个属性面板就能完成大部分设置。下面这份指南会讲清楚它装在哪、怎么装、能改什么,以及遇到问题时怎么处理。 ## 安装 ExplorerP

gitblog_00310的博客 828

R语言检验时间序列的平稳性(tseries包adf.test):时间序列数据是zoo或xts对象,使用coredata函数提取原始数据,再将其传递给adf.test函数

R语言检验时间序列的平稳性(tseries包adf.test):时间序列数据是zoo或xts对象,使用coredata函数提取原始数据,再将其传递给adf.test函数

statistics+insight+vista+power 2359

Android使用SharedPreferences和SQLite数据库实现数据存储

Android使用SharedPreferences和SQLite数据库实现数据存储

AMD RX显卡如何用ffmpeg硬件加速快速剪视频

视频处理领域中,硬件加速是提升转码与剪辑效率的关键技术。GPU通过专用媒体引擎承担视频编解码计算,可显著降低CPU负载并加快处理速度。AMD AMF(Advanced Media Framework)即为Radeon RX系列显卡提供硬件加速能力,配合ffmpeg命令行工具,能实现高效的批量转码、快速裁剪与关键片段提取。这类方案尤其适合庭审录像整理、会议记录剪辑、培训素材分段等长视频处理场景,无需依赖在线剪辑平台,也避免反复渲染导出。基于ffmpeg与Python脚本可将流程封装为本地批量处理工具,并进一步

weixin_34198453的博客 408

Vivado XDMA仿真实战:从配置到链路训练全解析

本文深入解析了Vivado中XDMA IP核的仿真实战流程,重点剖析了PCIe链路训练状态机(LTSSM)的工作原理与调试方法。通过搭建仿真环境、解读日志与波形,手把手指导如何从配置、链路训练(LTSSM)到BAR映射与DMA启动进行全流程分析与问题定位,帮助工程师掌握核心调试技能,确保PCIe链路稳定与数据传输正确。

weixin_29197051的博客 154

Windows 11升级全攻略:从硬件自查到系统调优,彻底解决卡顿与兼容问题

操作系统升级涉及硬件兼容、安全启动与驱动适配等多层技术原理。以Windows 11为例,其升级门槛中的TPM 2.0与UEFI安全启动,既是安全基石,也常成为失败主因。实际工程中,用户常遇到远程升级卡在“请稍后”、希望实现暂停更新100年、以及老设备驱动不兼容等高频痛点。理解这些现象背后的机制,掌握系统化排查与调优手段,能显著提升升级成功率。围绕Windows 11升级全流程,从硬件自查、官方升级路径选择、安装报错定位,到升级后的性能优化与专业软件兼容性,提供一套可复制的工程实践指南,让系统迁移更顺畅。

weixin_31240035的博客 304

模仿学习(Imitation Learning)概述

什么是模仿学习呢?简单来说,模仿学习(Imitation Learning),就是要训练机器能够复制人类的连续动作,进而达到模仿的目的。其实,Imitation Learning的实用性很高,假设今天有一个训练场景,你不知道该怎么定奖励值(reward),但是你可以收集到专家的示范数据(expert demonstration data),你就可以考虑用Imitation Learning这个方法。因此,模仿学习也被寄予很高的期待,成为下一代强人工智能的关键技术。......

qq_22749225的博客 2万+

人类肠道微生物群落代谢建模

MICOMWeb 是款用户友好型网站,专为人类肠道微生物群落代谢建模设计。该网站旨在解决基因组尺度代谢模型(in silico)构建过程中的3大限制:① 使用 MICOM Python 包进行通量平衡分析时对用户 Python 编程知识的要求;② 支持预定义和用户自定义饮食,以生成专属代谢模型;③ 处理宏基因组鸟枪法测序或 16S 扩增子测序获得的真实丰度数据时,所需的高通量计算基础设施。本文展示了 MICOMWeb 的核心功能,用户可轻松开展虚拟实验,为3个已发表数据集的实验验证生成功能性假设。

多组・学・多组学 1169

6G近场通信中的波束训练技术挑战与解决方案

在6G通信系统中,极大规模天线阵列(ELAA)的引入使得通信距离进入近场区域,传统的远场平面波假设不再适用。近场通信面临相位失稳、高维度搜索空间和多径环境复杂性等技术挑战。针对这些问题,基于高斯过程辅助的两阶段稀疏相位恢复方案被提出,通过DFT波束空间物理特性设计专用核函数,并结合Rician噪声特性的幅度恢复算法,有效降低了训练开销。该技术在毫米波通信、智能反射面和感知通信一体化等领域具有广泛应用前景,为6G近场通信提供了可靠的波束训练解决方案。

weixin_30301449的博客 518

智能车竞赛飞檐走壁组赛道制作全攻略:从电磁线铺设到立体元素搭建

本文提供了智能车竞赛飞檐走壁组赛道制作的完整指南。从电磁线选材、电流控制与精准铺设等基础入手,详细解析了垂直墙面、圆筒、跷跷板等核心立体元素的构建技巧与过渡处理。重点分享了确保赛道稳定、符合规则且便于调试的实战经验,帮助参赛队伍搭建可靠的立体赛道,为车模算法调试奠定坚实基础。

weixin_29292535的博客 1270

MagicalRecord,一个简化CoreData操作的工具库

简介 项目主页:https://github.com/magicalpanda/MagicalRecord 实例下载:https://github.com/ios122/MagicalRecord 在软件工程中,活动记录模式是一种用于在关系数据库中存储数据的设计模式.这种设计模式最早由Martin Fowler在他的 Pattern...

weixin_34056162的博客 314

VisionMaster Qt二次开发:图像获取、COM组件渲染与本地化存储实战

本文详细介绍了基于VisionMaster进行Qt二次开发的核心实战流程,涵盖环境搭建、方案加载、图像数据获取、COM组件渲染与本地化存储。重点解析了如何通过COM组件在Qt界面中实时显示图像,以及将VM图像数据转换为QImage并保存为本地文件的关键步骤与常见问题,为工业视觉项目开发提供稳定高效的解决方案。

weixin_29229261的博客 205

OpenFOAM收敛问题排查指南:从参数设置到网格优化

本文系统性地介绍了OpenFOAM计算中收敛问题的排查方法。从理解收敛本质出发,详细讲解了如何通过调优求解控制参数(如松弛因子、离散格式)、合理设置时间步长与耦合算法,以及优化网格质量来解决发散难题。文章提供了从软件设置到硬件网格的完整排查路径,帮助用户实现稳定高效的计算流体力学模拟。

fern8的博客 790

使用Core Data应避免的十个错误

Core Data是苹果针对Mac和iOS平台开发的一个框架,主要用来储存数据。对很多开发者来说,Core Data比较容易入手,但很难精通,如果没有正确的学习方法,你将很难真正理解它,更不用说精通了。 “” 阅读器 iOS开发iOSCore Data 原文:Avoiding Ten Big Mistakes iOS De

hong1595的专栏 944

Qt实现思维导图功能1『核心树』

利用Qt的QGraphicsView框架实现思维导图功能 百度网盘体验地址: 链接:https://pan.baidu.com/s/15x9F48agCDOQbsyH3VwVXA 提取码:8svh 注:UI风格参考博主:前行中的小猪,博文地址:https://blog.youkuaiyun.com/GoForwardToStep/article/details/124692790?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_u

浮生流年的博客 6161

coreData详解

1、初识CoreData CoreData的结构构成: NSManagedObjectModel的构成:   可以通过Entity创建继承自NSManagedObject类的文件,这个文件就是开发中使用的托管对象,具备模型对象的表示功能,CoreData的本地持久化都是通过这个类及其子类完成的。   在CoreData的整体结构中,主要分为两部分。一个是NSManagedObjectConte...

weixin_34365635的博客 505

【YOLO系列】YOLOv5超详细解读(源码详解+入门实践+改进)

一文带你详细了解YOLOv5(含YOLO系列论文讲解+源码详解+入门实践+算法改进)

路人贾的博客 25万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: 数据结构——队列
下一篇: 解决Keyboard遮盖输入的几种办法
RannieR
博客等级 码龄14年 180粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值