2012-02-08 39 views
2

我在更新标签的关键事件上调用方法。ViewDidLoad中的调用方法()

[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。谢谢。 :)

+1

如果您颠倒指示,会发生什么情况? (调用'[self updateFolderText];'然后'[super viewDidLoad];') – Zakaria 2012-02-08 15:58:43

+1

该方法在您的视图控制器的.h中展开,然后在您的.m中实现?我真正要问的是......这个方法在哪里?我会做扎卡里亚说的......哈哈。 – tallybear 2012-02-08 15:59:50

+0

哈哈......该死......我真的忘了把它放到头文件中。对不起,这是一个非常漫长的一天;) – Chris 2012-02-08 16:05:51

回答

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

只是打我吧:) – 2012-02-08 16:02:05

+1

哈哈该死的我太 – glogic 2012-02-08 16:03:54

+0

三个答案都是一样的 - 现在有一些像样的答案验证;-) – 2012-02-08 16:05:38

2

你需要确保你已经声明之前在格兰视图 - 控制的.H功能updateFolderText在@end一般(公共职能)或私人聚会,你会在.M的顶部

@interface viewcontrollername() 
-(void)updateFolderText; 
@end 

它可能是其他的工作在哪里的代码,因为你具备的功能它宣布它自我以上它被称为

2

确保您的方法在您的类的接口中声明。有两种选择。要将它声明为您的类的可公开访问的方法,您必须将其放入标头(.h)文件中。

声明看起来是这样的:

@interface myClass : UIViewController 
- (void)updateFolderText; 
@end 

要声明是因为这是唯一的类中访问(当然,不是真的,但有效的),那么你可以把这个在上面的方法你.m文件,@implementation

@interface myClass() 
- (void)updateFolderText; 
@end 

这第二种方法使得之前的方法“私人”至于建造时间的警告有关。请注意,实际上该类仍然会在运行时对此选择器作出响应。

+0

这样做的第二种方式叫做“Class Continuation”,它们很棒。 :D正如你所说,不是私人的,而是隐藏得如此有效的私人。 – Sam 2012-02-08 16:13:02

1

确保-(void)updateFolderText已定义,无论是在.h文件还是在.m文件的专用界面中。另外,如果-(void)updateFolderText物理上位于.m文件中的viewDidLoad方法的上方,它应该能够看到它。

相关问题