为啥我不能为 CDTVC 中的私有 UIRefreshControl 属性创建 Getter?

Posted

技术标签:

【中文标题】为啥我不能为 CDTVC 中的私有 UIRefreshControl 属性创建 Getter?【英文标题】:Why Can't I Create A Getter for a Private UIRefreshControl Property in CDTVC?为什么我不能为 CDTVC 中的私有 UIRefreshControl 属性创建 Getter? 【发布时间】:2014-08-01 16:39:36 【问题描述】:

我能够为公共刷新控件创建一个 getter。

但是当我尝试对私有刷新控件进行相同操作时,它不起作用。

例如

//MyClass.h 

@interface MyClass : CoreDataTableViewController
@property (nonatomic, strong) UIRefreshControl *myPublicRefreshControl; 
@end


// MyClass.m

@interface MyClass ()
@property (nonatomic, strong) UIRefreshControl *myPrivateRefreshControl; 
@end

@implementation MyClass

- (UIRefreshControl*)myPublicRefreshControl

 if(!_myPublicRefreshControl) 

       _myPublicRefreshControl = [[UIRefreshControl alloc] init];
  
      return _myPublicRefreshControl;

我能够为公共刷新控件创建一个 getter。

但是当我尝试对私有刷新控件进行相同操作时。即

- (UIRefreshControl*)myPrivateRefreshControl

 if(!_myPrivateRefreshControl) 

_myPrivateRefreshControl = [[UIRefreshControl alloc] init];
 
 return _myPrivateRefreshControl;


@end

Xcode 无法找到实例变量 _myPrivateRefreshControl。

它给出了错误

“使用未声明的标识符'_myPrivateRefreshControl'”

任何想法为什么会这样?

【问题讨论】:

在 .m 文件中有“@propery”,缺少“t”。是不是打错字了? 谢谢@Mike,这只是一个错字。 使用该代码对我来说很好...... 你也重写了setter吗?如果您同时覆盖属性的 getter 和 setter,Xcode 将给出该错误。 谢谢布兰登。不,我没有。我知道那个,谢谢,当两者都做时必须@synthesize。 【参考方案1】:

我看到有两件事可能会导致问题。首先,您将@property 拼错为“@propery”。但是,我怀疑这只是您问题中的一种类型,因为编译器会在您的实际代码中警告您。

其次,看起来您的两个@interface 声明都在创建未命名的类别而不是类。这可能导致编译器忽略/误解您的第二个声明。尝试在标题中的类声明之后删除()

【讨论】:

谢谢安德鲁,他们实际上都是错别字。问题仍然存在。 理论上,您的代码对我来说是正确的。您是否尝试过仔细检查其他错别字?我发现使用 cut-n-paste 复制名称(特别是对于长名称)很有帮助。 您好安德鲁,感谢您的宝贵时间。我已经包含了一些我原本故意省略的内容。 MyClass 是 CoreDataTableViewController 的子类。 gist.github.com/CloudNiner/8681866 我不希望这会产生任何影响,除非与超类中的另一个属性发生冲突(看起来并非如此)。您是否尝试过用一个几乎不包含其他内容的全新类来重现问题?我的猜测是它可以正常工作,并且您的问题源于您在示例中省略的内容。

以上是关于为啥我不能为 CDTVC 中的私有 UIRefreshControl 属性创建 Getter?的主要内容,如果未能解决你的问题,请参考以下文章

如果构造函数在私有部分,为啥我们不能创建对象?

为啥我的函数不能访问它所在类的私有变量 INSIDE?

为啥我不能访问 TypeScript 私有成员?

为啥类或接口不能接收私有或受保护的访问修饰符?

为啥要为属性创建私有字段?

为啥我不能在 main 方法中调用私有变量?