ncopopying议定书
我有一个工厂对象,用于基于谓词创建新的核心数据实体。]这使得使用单个方法使我需要的对象真的很容易。我有一个实例,我想复制我检索到的现有对象,以便我可以使用对象中的现有数据,同时从核心数据中重新启用相同的实体,然后对其进行后续更新。之前,我只是要求核心数据再次检索对象。但为什么不使用ncoping.
协议?
让我们设置
要开始,我有一种方法WordFactory.
类以使用简单的谓词从核心数据获取单词实体。该方法的名称是getwoodfromstring:
。
-(字*)getwoodfromstring.:(nsstring.*)串{//如果字符串为空,则会离开此处如果([String stringByTrimmingCharacterSete.:[nscharacterset fhitespaceandnewlacterset.]]。长度==.0.){返回零;}//从持久性商店获取单词字*字=[Word ObjectWithPredicate.:[nspredicate谓词vithformat:@“word =%@”那串]];如果(字==.零){//创建一个新单词//我不会展示这段代码来使这个更简单}返回字;}
你可以看到我正在使用RESTKITActiveRecord样式NSManagedObject扩展。这使得它真的很容易使用谓词来查询核心数据,从而在建立核心数据连接所需的仪式上削减仪式并设置谓词。如果没有找到结果,这将返回一个nil对象。
我参考了一个词,被称为紧门
。这是用户刚刚播放的词。我想从先前创建的一系列单词中随机拉动另一个单词。该nsarray.
我以前创建的单词被称为单词
。捕获是我想确保下一个随机字不同的单词与用户刚刚播放的单词不同。所以,我仍然想要引用旧词,所以我可以将它与下一个随机字进行比较。
以下是获取下一个单词的代码片段:
字*上文=[WordFactory GetwoodFromString.:紧门。字];㈡随机;而([紧门。Word isequaltostring.:上文。字]){随机=Arc4Random.()%[单词指定的计数];紧门=[单词指定的objectatIndex.:随机];}
从核心数据中检索上一条文 - 每次都会检索。这似乎是核心数据的大量工作,并获取另一个单词对象。所以,它的工作时,为什么不只是制作副本紧门
并将其保存为上文
?这样做,我必须实施ncoping.
在我的议定书字
类。
实施nscoping.
首先要做的就是告诉我们要实施的这个词ncoping.
协议。为此,我们添加了ncoping.
在一组括号内@接口
标题文件中的声明(在此情况下Word.h):
@接口字:nsmanagedObject.<rkrequestdelegate那ncoping.>
您可以在上面看到我也在实现RKRequestDelegate协议,因此我们只需使用逗号分隔的列表在括号中指定协议。接下来,我们抬头看NSCopying协议的Apple文档看看需要什么方法。正如我们所看到的,只有一个方法需要,调用CopyWithZone:
。我们需要在我们猜测它,实现文件(Word.m)中实现这一点:
#Pragma.标记 - NSCopying协议方法-(字*)CopyWithZone.:(nszone.*)区{字*字=[[Word Alloc.]在里面];[Word Setword.:[自字]];[Word setwordid.:[自歌手]];[Word setvalid.:[自有效]];[Word setProbability.:[自可能性]];[单词setLength.:[自长度]];[单词setlastupdated.:[自最近更新时间]];[Word setfronthooks.:[自Fronthooks.]];[Word SetBackhooks.:[自逆向铲子]];[Word SetDefinition.:[自定义]];[单词意识形来:[自尝试]];[Word setdifficulty.:[自困难]];[Word Setqueued.:[自排队]];返回字;}
在这里,我正在分配和初始化一个新的字
对象,并将其存储为名为的变量字
。我正在为Word对象的所有属性设置值。然后,我返回这个新对象,它具有与旧的所有数据相同。相当容易!