菜鸟教程小白 发表于 2022-12-13 10:42:40

ios - 原始访问器没有可见的@interface


                                            <p><p>我正在尝试为一个简单的 transient 属性实现一个 getter 方法。 transient 属性是一个 fullName 属性。 fullName = firstName + lastName 的典型示例。</p>

<p>我正在开发一个 iOS 应用(以防相关的东西在 OS X 上的工作方式不同)</p>

<p>在“掌握核心数据”WWDC 2010 主题演讲之后,我为我的 Person NSManagedObject 子类创建了一个类别。在该类别中,我添加了以下方法:</p>

<pre><code>- (NSString *)fullName {

;
NSString *fullName = ;
;

if (fullName == nil) {
    fullName = ;
    ;
}
return fullName;}
</code></pre>

<p>Person 类已由 Xcode 自动创建,并具有 fullName 属性及其使用 @dynamic 的实现。</p>

<p>当我尝试编译项目时,我收到此类别的错误消息“没有可见的 @interface for 'Person' 声明选择器 'primitiveFullName'”。</p>

<p>为什么当 Apple 文档显示“例如,给定具有属性 firstName 的实体,Core Data 会自动生成 firstName、setFirstName:、primitiveFirstName 和 setPrimitiveFirstName:”时,我会收到此错误。 ??</p>

<p>错误是编译错误,不是警告</p>

<p>我应该做一些特别的事情来生成原始访问器吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p><code>primitiveFullName</code> 和 <code>setPrimitiveFullName</code> 肯定会在运行时自动生成。但是在编译时,编译器找不到这些方法。为了在调用这些方法时抑制编译错误,您应该声明这些方法的原型(prototype)。</p>

<p>如果在 2010 年时,Objective-C 编译器只表示警告以调用那些未声明的方法。但是在引入 ARC 之后,Objective-C 编译器不允许调用这种未声明的方法。</p>

<p>如下:</p>

<pre><code>@interface Person (PrimitiveAccessors)

- (NSString *)primitiveFullName;
- (void)setPrimitiveFullName:(NSString *)newName;

@end

@implementation Person (TransientProperties)

- (NSString *)fullName {
    ;
    NSString *fullName = ;
    ;

    if (fullName == nil) {
      fullName = ;
      ;
    }
    return fullName;
}

@end
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 原始访问器没有可见的@interface,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/29802367/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/29802367/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 原始访问器没有可见的@interface