菜鸟教程小白 发表于 2022-12-13 02:51:41

ios - 使用 NSFetchedResultsController 了解 transient 属性


                                            <p><p>我开始使用 Core Data 创建一个应用程序,以检索我想要使用 NSFetchedResultController 的分段表的数据,在 <a href="http://developer.apple.com/library/ios/#samplecode/DateSectionTitles/Introduction/Intro.html" rel="noreferrer noopener nofollow">example</a> 中从苹果那里有两个额外的属性。</p>

<ul>
<li>原始时间戳</li>
<li>primitiveSectionIdentifier</li>
</ul>

<p>对于 <strong>primitiveSectionIdentifier</strong> 的情况,苹果表示</p>

<blockquote>
<p>In contrast, with transient properties you specify two attributes and
you have to write code to perform the conversion.</p>
</blockquote>

<p>因为 sectionidentifier 是 transient 属性。
但是 timeStamp 呢?这个属性不是 transient 的,为什么会有一个原始的TimeStamp 属性?以及为什么有明确的 timeStampsetter ?</p>

<pre><code>- (void)setTimeStamp:(NSDate *)newDate {

    // If the time stamp changes, the section identifier become invalid.
    ;
    ;
    ;

    ;
}
</code></pre>

<p>或者它可能不是真正的二传手? _timeStamp=newDate 在哪里? </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>CoreData 为您生成访问器。它生成“用于建模属性的公共(public)和原始 get 和 set 访问器方法”。</p>

<p>所以在这种情况下它已经生成了:</p>

<pre><code>-(NSDate*)timeStamp;
-(void)setTimeStamp:;
-(NSDate*)primitiveTimeStamp;
-(void)setPrimitiveTimeStamp:;
</code></pre>

<p><strong>“为什么有一个primitiveTimeStamp 属性?”</strong></p>

<p>声明只是为了抑制编译器警告。 IE。如果您删除了该属性的声明,您会发现编译时出现警告,但代码仍会运行。
或者你也可以使用 <code>;</code></p>

<p><strong>“为什么有明确的 setter 用于 timeStamp ?”</strong></p>

<p>这是必需的,因为设置时间戳需要重新计算“sectionIdentifier”。这是通过将其设置为不 <code>nil</code> 并让 get 访问器延迟重新计算来实现的。</p>

<p><strong>“_timeStamp=newDate 在哪里?”</strong></p>

<p>这基本上是在 <code>setPrimitiveTimeStamp</code> 的自动生成实现中完成的。</p>

<p>来自文档的引用:</p>

<p>默认情况下,Core Data 为托管对象类的建模属性(属性和关系)动态创建高效的<strong>公共(public)和原始</strong> get 和 set 访问器方法。这包括键值编码可变代理方法,例如 addObject: 和 removes:,如 mutableSetValueForKey 的文档中所述:托管对象实际上是它们所有对多关系的可变代理。</p>

<p>注意:如果您选择实现自己的访问器,动态生成的方法永远不会替换您自己的代码。
例如,给定一个具有 firstName 属性的实体,Core Data 会自动生成 firstName、setFirstName:、primitiveFirstName 和 setPrimitiveFirstName:。 Core Data 甚至对由 NSManagedObject 表示的实体也是如此。要在调用这些方法时抑制编译器警告,您应该使用 Objective-C 2.0 声明的属性功能,如“声明”中所述。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 使用 NSFetchedResultsController 了解 transient 属性,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/16938764/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/16938764/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 使用 NSFetchedResultsController 了解 transient 属性