gpt4 book ai didi

ios - 关系上的核心数据访问错误 - 通过更改关系名称修复?

转载 作者:行者123 更新时间:2023-11-29 02:46:30 26 4
gpt4 key购买 nike

昨天下午我遇到了一个非常奇怪的问题。我有一个核心数据模型。简单来说,有一个调用实体和一个新 WOs 实体,在调用和新 WO 之间具有可选的一对多关系。

调用->>newWO

关系在调用对象上调用了 newWosForCall,在 newWO 对象上调用了 callForNewWO。

我开始遇到错误的访问错误。为了帮助调试,我创建了一个带有单个按钮和简化代码的新 View Controller 。我清空了模拟器,因此核心数据中没有任何内容。我添加了一个调用对象来调用数据。核心数据中没有新的 WO 对象。

在按钮上单击我访问了关系的数据,即

Call *aCall=.... get a call object from a fetch request
if (aCall.newWOsForCall.count==0)
{NSLog(@"no new wos");}
else
{NSLog(@"there are WOs");

第一次点击一切正常。再次单击该按钮,出现错误访问错误。此行为是一致的 - 第一次访问正常,然后以任何方式第二次访问调用 .newWOsForCall 关系导致错误。

下午的简短版本是:我尝试删除双方的关系并重新创建它。我清理了项目,然后重新编译并具有相同的行为。经过多次咒骂并检查调用对象的其他关系在绝望中是否正常工作后,我只是将 replationship 从 newWOsForCall 重命名为 pleaseDamnWellWork(真名有更多咒骂)。我重新编译,更改了按钮上的代码以具有新的关系名称....并且它适用于每次点击。完全没有错误的访问错误。

只是为了证明这是问题所在,我将关系重命名回 newWOsForCall 并开始出现与以前相同的行为 - 第一次点击正常,第二次点击出现错误访问错误。

我知道我有工作代码 - 我对此非常感激,但是有没有人遇到过类似的事情?知道为什么它不喜欢这种关系的特定名称吗?

我对其他关系使用了类似的命名约定,它们很好 - 例如 call->>LogFile 关系称为 logFilesForCall

最佳答案

某些方法名称在 ARC 中具有特殊的含义和处理方式。这部分是出于历史原因,并且是使一切正常运行所必需的。例如:

Methods in the alloc, copy, init, mutableCopy, and new families are implicitly marked attribute((ns_returns_retained)). This may be suppressed by explicitly marking the method attribute((ns_returns_not_retained)).

因此,通过在方法(返回关系)的开头使用单词 new,您告诉 ARC 一些不正确的事情。

此外,在持久性数据存储的上下文中,“newWO”中的“new”是什么意思?稍后当您从商店中获取对象时它是否有意义?

因此,您需要更改名称,通常您也应该更改实体的名称。

关于ios - 关系上的核心数据访问错误 - 通过更改关系名称修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25052769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com