菜鸟教程小白 发表于 2022-12-13 01:19:09

ios - 类别中的自定义 NSManagedObject setter


                                            <p><p>我已将所有 NSManagedObject 的自定义逻辑放在一个类别中,这样当模型发生变化时,我可以从模型中重新生成标准类。</p>

<p>我需要的一个这样的逻辑是对象属性之一的自定义 setter :</p>

<pre><code>- (void) setName:(NSString *)name
{
    ;
    ;
    ;
    NSLog(@&#34;name was changed&#34;);//for example
}
</code></pre>

<p>我已将其放在类别中,在本例中为 <code>Item+Custom.m</code></p>

<p>我的问题:</p>

<p>为什么每当我设置一个Item的名称时,<strong>不需要</strong>导入Item+Custom.m?上面的日志语句仍然会触发。</p>

<p>只是好奇发送消息的类如何不需要知道类别才能使逻辑仍然触发?</p>

<p>并且(也许是一个单独的问题)如果我将具有不同日志记录语句的相同自定义 setter 添加到同一对象的第二个类别会发生什么?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>加载程序时,所有类别方法都会被运行时知道。所以如果你声明了一个<code>-</code>方法,那么Core Data就不会再在运行时创建这个方法了。</p>

<p>您无需导入任何内容,因为 <code>name</code> 已在 Xcode 生成的托管对象子类文件中声明为 <code>@dynamic</code> 属性。</p>

<p>如果两个类别声明了相同的方法,或者如果一个类别中声明的方法名称与原始类中的方法相同,则行为未定义,请参阅 <a href="http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html#//apple_ref/doc/uid/TP40011210-CH6-SW4" rel="noreferrer noopener nofollow">Avoid Category Method Name Clashes</a>在“使用 Objective-C 编程”中。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 类别中的自定义 NSManagedObjectsetter ,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/15145309/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/15145309/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 类别中的自定义 NSManagedObject setter