Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 关系上的核心数据访问错误-通过更改关系名称修复?_Ios_Xcode_Core Data - Fatal编程技术网

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

Ios 关系上的核心数据访问错误-通过更改关系名称修复?,ios,xcode,core-data,Ios,Xcode,Core Data,昨天下午我处理了一个非常奇怪的问题。我有一个核心数据模型。简单地说,有一个调用实体和一个新WOs实体,调用和新WO之间有一个可选的一对多关系 呼叫->>newWO 该关系在call对象上称为newWosForCall,在newWO对象上称为callForNewWO 我开始出现错误的访问。为了帮助调试,我用一个按钮和简化的代码创建了一个新的视图控制器。我关闭了模拟器,所以核心数据中没有任何内容。我在调用数据中添加了一个调用对象。核心数据中没有新的WO对象 在单击按钮时,我访问了关系ie的数据 Ca

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

呼叫->>newWO

该关系在call对象上称为newWosForCall,在newWO对象上称为callForNewWO

我开始出现错误的访问。为了帮助调试,我用一个按钮和简化的代码创建了一个新的视图控制器。我关闭了模拟器,所以核心数据中没有任何内容。我在调用数据中添加了一个调用对象。核心数据中没有新的WO对象

在单击按钮时,我访问了关系ie的数据

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关系导致错误

下午的简短版本是:我试图删除双方的关系,然后重新建立。我清理了项目,然后重新编译,并有同样的行为。在经过多次咒骂并检查call对象的其他关系在绝望中正常工作后,我只是将replationship从newWOsForCall重命名为pleaseDamnWellWork(真实姓名有更多咒骂)。我重新编译,更改了按钮上的代码以获得新的关系名称。。。。每次点击都有效。完全没有错误的访问错误

为了证明这就是问题所在,我将关系重新命名为newWOsForCall,并开始获得与以前相同的行为-第一次单击很好,第二次单击出现了错误的访问错误

我知道我有工作代码——对此我非常感激,但有人遇到过类似的事情吗?你知道为什么它不喜欢这段感情的特定名字吗


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

某些方法名称在ARC中有特殊的含义和处理。这在一定程度上是出于历史原因,是一切顺利的必要条件。例如:

alloc、copy、init、mutableCopy和new族中的方法被隐式标记为属性((ns_返回_保留))。这可以通过显式标记方法属性((ns\u返回\u未保留))来抑制

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

另外,在持久数据存储的上下文中,“newWO”中的“new”是什么意思?以后当你从商店取回一件物品时,这有意义吗


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

您好,谢谢。我知道“new”这个词可能是一个关键字,但“newWOsForCall”不是一个关键字,所以我没想到会引起问题。我想这是需要注意的。所以你会期望一种叫做allocatedTickets的不动产关系也会引起问题,因为它以“alloc”开头?我真的希望它能够区分这里的案例。不过,这绝对是一件值得记住的事情。术语newWO是newworksorder的缩写。它并不意味着像创建一个新实例那样是新的。我同意这不是一个好名字,但它是他们传统系统的翻版。“new”不是一个语言关键词,但它是一个具有特殊含义的词。特别是,后跟类名的“new”是一种常见的构造函数方法命名方案(方法名与之匹配)alloc’没有完全相同的关联,大写也很重要,但你也应该远离这种命名。不同语言的乐趣啊!谢谢