• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-13 10:42:40 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

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

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

- (NSString *)fullName {

  [self willAccessValueForKey"fullName"];
  NSString *fullName = [self primitiveFullName];
  [self didACCessValueForKey"fullName"];

  if (fullName == nil) {
    fullName = [NSString stringWithFormat"%@ %@", self.firstName, self.lastName];
    [self setPrimitiveFullName:fullName];
  }
  return fullName;}

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

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

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

错误是编译错误,不是警告

我应该做一些特别的事情来生成原始访问器吗?



Best Answer-推荐答案


primitiveFullNamesetPrimitiveFullName 肯定会在运行时自动生成。但是在编译时,编译器找不到这些方法。为了在调用这些方法时抑制编译错误,您应该声明这些方法的原型(prototype)。

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

如下:

@interface Person (PrimitiveAccessors)

- (NSString *)primitiveFullName;
- (void)setPrimitiveFullNameNSString *)newName;

@end

@implementation Person (TransientProperties)

- (NSString *)fullName {
    [self willAccessValueForKey"fullName"];
    NSString *fullName = [self primitiveFullName];
    [self didAccessValueForKey"fullName"];

    if (fullName == nil) {
        fullName = [NSString stringWithFormat"%@ %@", self.firstName, self.lastName];
        [self setPrimitiveFullName:fullName];
    }
    return fullName;
}

@end

关于ios - 原始访问器没有可见的@interface,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29802367/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap