Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是否有必要在CoreData中使用合并策略并允许外部存储以避免崩溃?

是否有必要在CoreData中使用合并策略并允许外部存储以避免崩溃?
EN

Stack Overflow用户
提问于 2022-03-01 11:34:36
回答 1查看 84关注 0票数 0

我使用CoreData + NSPersistentCloudKitContainer备份我的模型。我的一个NSManagedObject将图片存储为二进制数据,并允许对外部存储进行检查。

这是非常随机的,但有时当我调用context.save()时,即使没有编辑这个对象,也会出现合并冲突。实际上,我只是尝试创建一个新的对象(与有冲突的对象不同的类型),而崩溃发生在另一个对象上。

除了External Data Reference的自引用外,每一项都是相同的值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    ERROR AppDelegate.saveContext():262 - Unresolved error Error Domain=NSCocoaErrorDomain Code=133020 "Impossible de fusionner les changements." UserInfo={conflictList=(
    "NSMergeConflict (0x600002c62f40) for NSManagedObject (0x60000158da40) with objectID '0x816659a4c358c32f <x-coredata://CEAE3B14-5782-4C18-AAE8-B05D91CFEC8A/Aquarium/p5>' with oldVersion = 56 and newVersion = 57 and old object snapshot = {\n    albums = \"<null>\";\n    aquaID = 6;\n    dateDeCreation = \"2022-01-15 18:24:00 +0000\";\n    imageData = External Data Reference: <self = 0x60000158db80 ; path = 1B9355A6-4101-479D-81F1-DFC106BBCD75 ; length = 1617016>;\n    nom = 11321;\n    volume = 60;\n} and new cached row = {\n    albums = \"<null>\";\n    aquaID = 6;\n    dateDeCreation = \"2022-01-15 18:24:00 +0000\";\n    imageData = External Data Reference: <self = 0x6000015ccf50 ; path = 1B9355A6-4101-479D-81F1-DFC106BBCD75 ; length = 1617016>;\n    nom = 11321;\n    volume = 60;\n}"
), NSExceptionOmitCallstacks=true}, ["NSExceptionOmitCallstacks": 1, "conflictList": <__NSArrayM 0x600003a25ec0>(
NSMergeConflict (0x600002c62f40) for NSManagedObject (0x60000158da40) with objectID '0x816659a4c358c32f <x-coredata://CEAE3B14-5782-4C18-AAE8-B05D91CFEC8A/Aquarium/p5>' with oldVersion = 56 and newVersion = 57 and old object snapshot = {
    albums = "<null>";
    aquaID = 6;
    dateDeCreation = "2022-01-15 18:24:00 +0000";
    imageData = External Data Reference: <self = 0x60000158db80 ; path = 1B9355A6-4101-479D-81F1-DFC106BBCD75 ; length = 1617016>;
    nom = 11321;
    volume = 60;
} and new cached row = {
    albums = "<null>";
    aquaID = 6;
    dateDeCreation = "2022-01-15 18:24:00 +0000";
    imageData = External Data Reference: <self = 0x6000015ccf50 ; path = 1B9355A6-4101-479D-81F1-DFC106BBCD75 ; length = 1617016>;
    nom = 11321;
    volume = 60;
}

我怀疑数据引用在应用程序加载和第一次调用备份之间发生了变化。但是长度是相同的,因为这个值在用户端没有改变,所以我不明白为什么引用会改变。

我现在没有使用合并策略,它只是不保存。

为了安全起见,我是否可以使用NSMergeByPropertyObjectTrumpMergePolicy,或者是否应该找到为什么引用发生了更改?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-04 15:07:20

我从未使用过CoreData外部数据引用,所以这是一个疯狂的猜测。

在我看来,合并冲突的产生是因为对外部文件的引用发生了变化,尽管文件的路径保持不变。

这可能是自定义合并策略的一种情况。您必须通过自己的代码解决合并冲突,该代码只需选择一个引用,因为这两个引用反正都指向同一个文件。

最近我尝试为不同的情况建立我自己的自定义合并策略,但是我不能完全确定我是否正确,请看我的问题,相关的代码和参考这里。也许您可以针对自己的情况测试类似的代码。

编辑

关于您的问题,如果您可以使用NSMergeByPropertyObjectTrumpMergePolicy:根据合并冲突,除了imageData引用之外,您实体的所有属性都保持不变。因此,在尝试使用自定义合并策略之前,应该明确地尝试标准合并策略:

NSMergeByPropertyObjectTrumpMergePolicy只从托管上下文更新imageData引用,而NSMergeByPropertyStoreTrumpMergePolicy只从持久存储更新imageData引用。但是,由于所有其他属性都没有改变,而且两个实体中的文件路径都是相同的,所以您可以同样地尝试NSOverwriteMergePolicyNSRollbackMergePolicy,它们分别在托管上下文或持久存储中使用整个实体,请参见医生们。只有在由于外部引用而失败的情况下,才应该考虑自定义合并策略。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71313747

复制
相关文章
不会吧?不会还有人不会测安卓吧
本文属于OneTS安全团队成员Gal0nYu的原创文章,转载请声明出处!本文章仅用于学习交流使用,因利用此文信息而造成的任何直接或间接的后果及损失,均由使用者本人负责,OneTS安全团队及文章作者不为此承担任何责任。
OneTS安全团队
2025/02/07
410
不会吧?不会还有人不会测安卓吧
你不会还不会安装Maven吧
(一般会用阿里云的镜像库,但不知道是我电脑还是网络的原因,下载jar包总会出错,换了很多阿里云镜像都不管用,最后换了腾讯云的就好了,所有这里给出了三个镜像)
爱学习的小超人
2023/03/11
6260
你不会还不会安装Maven吧
【Linux】权限管理——专治不会设置权限而头疼
在Linux系统中,权限是指系统用来限制和控制用户对文件和目录的访问能力的一组规则。这些规则决定了用户可以对文件或目录执行哪些操作,比如读取(read)、写入(write)、执行(execute)等。Linux系统通过权限来维护系统的安全性和数据的完整性。
_小羊_
2024/10/16
1070
【Linux】权限管理——专治不会设置权限而头疼
C# 永远不会返回的方法真的不会返回
一般情况下,如果一个方法声明了返回值,但是实际上在编写代码的时候没有返回,那么这个时候会出现编译错误。
walterlv
2020/02/10
9490
不会吧,不会吧,不会还有人看了这篇文章还不精通JWT吧
JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally signed. JWTs can be signed using a secret (with the HMAC algorithm) or a public/private key pair using RSA or ECDSA.
上分如喝水
2021/08/16
2.9K0
不会吧,不会吧,不会还有人看了这篇文章还不精通JWT吧
不会吧?你这些Git命令都不会~
1、设置与帮助 1. git help <command> # 显示指定命令的help 2. git config --global user.name "your name" 3. git config --global user.email "your email" 2、修改与提交 1. git status # 查看工作区状态 2. git add <file> # 将指定文件修改提交到本地暂存区 3.
chengcheng222e
2021/11/04
4260
不会git的程序员,会不会被鄙视?
事先声明啊,这与公司技术栈无关,不要说有些公司只用 git 管理。对于公司而言,使用什么版本控制有一定的考虑或者历史原因。但如果你遇到一个不会 git 的新同事,会不会感觉 ta 以前的公司有点low ?
闰土大叔
2018/11/06
1.3K0
不会吧不会吧,还有开发不会Java填充PDF模板数据的,赶紧看看吧
根据业务需求,获取实际业务数据,借助itext库功能,将业务数据填充入提前制作好的PDF模板中
huofo
2022/03/18
1.9K0
不会吧不会吧,还有开发不会Java填充PDF模板数据的,赶紧看看吧
不会死亡的书
旧书重生为精致的艺术品 在这个电子时代,纸质书籍被大多数人遗忘在角落,但是却在艺术家手里进化! Brian Dettmer在这个演讲中列了好多他的作品。 他把旧书重新改造,进行雕刻,裁剪,将书籍内部自有的文字和图片,重新打造成具有立体感的艺术品, 不仅如此,他选择留下来的文字和图片,这种重组展示出了另一种含义,用这些书对更深刻的哲学进行诠释。 在去年的某段时间,这些图片在网络上特别火,原来是出自他之手, 不得不佩服这种创造力,尤其是这种精细的手工,想象力,创造力。 一看到这些作品,第一想到的是《哈
杨熹
2018/04/02
7770
不会死亡的书
不会吧,你还不会用RequestId看日志 ?
在日常的后端开发工作中,最常见的操作之一就是看日志排查问题,对于大项目一般使用类似ELK的技术栈统一搜集日志,小项目就直接把日志打印到日志文件。那不管对于大项目或者小项目,查看日志都需要通过某个关键字进行搜索,从而快速定位到异常日志的位置来进一步排查问题。
IT大咖说
2021/11/26
1.6K0
箭头函数不会修改this
function Person () { this.name = 'little bear', this.age = 18 setTimeout(()=>{ console.log(this ) }) } var a = new Person() setTimeout里的this代表new Person出来的对象 function Person () { this.name = 'little bear', this.age = 18 setTimeout(function(){
windseek
2018/06/14
6640
箭头函数不会修改this
function Person () { this.name = 'little bear', this.age = 18 setTimeout(()=>{ console.log(this ) }) } var a = new Person() setTimeout里的this代表new Person出来的对象 function Person () { this.name = 'little bear', this.age = 18 setTimeout(function(){
windseek
2018/06/21
6390
有一只狗名叫WAF,不会跳也不会叫......
本号提供的工具、教程、学习路线、精品文章均为原创或互联网收集,旨在提高网络安全技术水平为目的,只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途,如有侵权请联系小编处理。
网络安全自修室
2022/05/16
9220
有一只狗名叫WAF,不会跳也不会叫......
不会吧不会吧,你不会还不知道这些提高JS代码质量的骚操作吧?
程序的健壮性是指程序在执行时,在局部发生错误的情况下,不影响整个系统的运行,而且我们能够很快的定位到发生错误的位置。我们通常使用以下几种方式来保证程序的健壮性。
AlbertYang
2020/09/08
1.2K0
不会吧不会吧,你不会还不知道这些提高JS代码质量的骚操作吧?
学不会的JVM
首先我们写的源文件叫.java文件,然后点击IDE的运行在硬盘会生成.class字节码文件,接着Java虚拟机从硬盘加载.class字节码文件,再者内部操作和解析成电脑能识别的机器码,最后CPU执行
晚上没宵夜
2020/03/10
3820
SaaS 公共责任:云不会永存,你的数据也不会
当我开启我的技术运营职业生涯(也就是现在的 DevOps),世界发生了翻天覆地的变化。那是在新千年到来之前,当时,世界上最大、最知名的软件即服务公司 Salesforce 还窝在旧金山的一间公寓里。
深度学习与Python
2022/03/23
4440
SaaS 公共责任:云不会永存,你的数据也不会
这年头还不会SpringBoot?
在说SpringBoot之前,我们得聊聊Spring,Spring是J2EE的轻量级代替品。无需开发重量级的JavaBean,Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java对象实现了JavaBean的功能。
程序员的时光001
2020/07/24
3890
这年头还不会SpringBoot?
测试管理你不会
1、也许你过往看过很多管理文章,也看过一些管理的书籍 。但都没过脑,没有去思考 。
IDO老徐
2022/12/29
2390
啥?不会Debug jdk源码
一个学弟问我,你觉得面试中问什么面试题的频率最高?我毫不犹豫的回答:“源码”,尤其是HasMap,我所经历的面试官几乎必问。朋友听后心一慌,自己还没看过。
大猫的Java笔记
2020/11/25
4730
啥?不会Debug  jdk源码
谁还不会单调栈
单调栈是满足单调性的栈,即在栈的基础上,维持栈内元素的单调性。典型题目如:有找某侧最近一个比其大(小)的值。
marsxingzhi
2023/07/13
2300

相似问题

简单-CCSM不会安装

30

统一不会加载ubuntu 14.04

10

在修改CCSM后恢复统一

10

TuxOnIce不会继续了

10

Xbmcbuntu安装不会继续

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文