我在更新标签的关键事件上调用方法。
[self updateFolderText];
当我在事件方法中执行此操作时,它可以工作,但是当我尝试在ViewDidLoad()中执行此操作时,我收到编译器错误。
- (void)viewDidLoad
{
[super viewDidLoad];
[self updateFolderText];
}
我收到以下错误:
error: Automatic Reference Counting Issue: Receiver type 'ViewController'
for instance message does not declare a method with selector 'updateFolderText'
嗯......我想这一定是微不足道的......我是Objective-c的新手。谢谢。 :)
答案 0 :(得分:4)
问题可能是因为您的方法updateFolderText
定义在viewDidLoad
下方。移动下面updateFolderText
的代码,它应该有效。
或者,您可以在类中明确声明该方法。添加以上@implementation
。
@interface className()
-(void)yourMethod; //not sure how youve fully define updateFolderText
@end
或者,正如您所说,您也可以在头文件中定义它:
-(void)yourMethod; //not sure how youve fully define updateFolderText
答案 1 :(得分:2)
你需要确保在@end通常(对于公共函数)之前已经在.h视图控制器的.h中声明了函数updateFolderText,或者对于私有函数,你将声明它在.m的顶部用
@interface viewcontrollername()
-(void)updateFolderText;
@end
它可能在代码中的其他地方工作,因为你在上面的函数本身被称为
答案 2 :(得分:2)
确保在您的类的界面中声明您的方法。有两种选择。要将其声明为类的公共可访问方法,必须将其放在标题(.h)文件中。
宣言看起来像:
@interface myClass : UIViewController
- (void)updateFolderText;
@end
声明是一种只能在你的类中访问的方法(好吧,不是真的,但有效),然后你可以把它放在.m文件的顶部,在@implementation之前
@interface myClass ()
- (void)updateFolderText;
@end
就构建时间警告而言,第二种方法使该方法“私有”。请注意,实际上该类仍将在运行时响应此选择器。
答案 3 :(得分:1)
确保在.h文件或.m文件的私有界面中定义了-(void)updateFolderText
。此外,如果-(void)updateFolderText
在物理上位于.m文件中的viewDidLoad方法之上,它应该能够看到它。