呼叫 - >> newWO
调用对象上的newWosForCall和newWO对象上的callForNewWO。
我开始收到错误的访问错误。为了帮助调试,我创建了一个带有单个按钮和简化代码的新视图控制器。我使模拟器空白,因此核心数据中没有任何内容。我添加了一个调用对象来调用数据。核心数据中没有newWO对象。
在按钮上单击我访问了关系的数据,即
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关系导致错误。
下午的简短版本是:我尝试删除双方的关系并重新创建它。我清理了项目然后重新编译并具有相同的行为。在大肆宣誓并检查调用对象之外的其他关系在绝望中工作正常后,我只需将重新编辑从newWOsForCall重命名为pleaseDamnWellWork(实名更咒骂)。我重新编译,更改按钮上的代码以获得新的关系名称....它适用于每次点击。完全没有错误的访问错误。
只是为了证明这是问题,我将关系重新命名为newWOsForCall并开始获得与以前相同的行为 - 第一次点击很好,第二次点击错误。
我知道我有工作代码 - 我非常感激,但有没有人遇到类似的东西?知道为什么它不喜欢这个关系的特定名称吗?
我对其他关系使用了类似的命名约定,它们很好 - 例如call->> LogFile关系称为logFilesForCall
答案 0 :(得分:1)
某些方法名称在ARC中具有特殊含义和处理。这部分是出于历史原因,并且需要使一切工作。例如:
alloc,copy,init,mutableCopy和new系列中的方法隐式标记为 attribute ((ns_returns_retained))。这可以通过明确标记方法属性((ns_returns_not_retained))来抑制。
所以,通过在方法的开头使用单词new
(返回关系),你告诉ARC一些不正确的东西。
此外,在持久数据存储的上下文中,'newWO'中的'new'是什么意思?以后从商店中取出物品时会有意义吗?
因此,您需要更改名称,通常也应该更改实体的名称。