为啥我不能为 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?的主要内容,如果未能解决你的问题,请参考以下文章