我完全是在iOS编程和Objective-C中自学,所以请原谅我在整体术语方面缺乏知识。
我有一个ACViewController
类及其各自的.h和.m文件。
此外,我有名为ACPortrait_Orient.h
和ACPortrait_Orient.m
的文件,我的ACPortrait_Orient.m
包含类方法+(void)updateTimeLabel:(ACViewController *)mainView
,其代码可使我的标签显示当前时间(它也在ACPortrait_Orient.h
声明。
在我的ACViewController.m
[ACPortrait_Orient updateTimeLabel:self];
中加#import ACPortrait_Orient.h
。
我已尝试在[self performSelector:@selector(updateTimeLabel:) withObject:self afterDelay:1.0];
方法中运行+(void)updateTimeLabel:(ACViewController *)mainView
,但我得到以下内容:
2014-02-20 01:04:09.212 AlarmClock [5013:70b] + [ACPortrait_Orient setTimeLabelPortrait:]:无法识别的选择器发送到类0x100073e98
2014-02-20 01:04:11.218 AlarmClock [5013:70b] * 由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:'+ [ACPortrait_Orient setTimeLabelPortrait:]:无法识别的选择器发送到类0x100073e98 “
我希望时间标签每秒更新一次,但这种方式似乎并不起作用。反正我是否每秒都要运行那个类方法?
答案 0 :(得分:2)
而不是像这样打电话
[self performSelector:@selector(updateTimeLabel:) withObject:self afterDelay:1.0];
像这样打电话
[ACPortrait_Orient performSelector:@selector(updateTimeLabel:) withObject:self afterDelay:1.0];
答案 1 :(得分:0)
首先要有正确的术语:这不是(编译时)警告,而是(运行时)异常。
其次,运行时不会抛出异常,因为它没有找到+updateTimeLabel:
。这非常有效。它错过了+setTimeLabel:
。我打赌,你只有一个实例方法-setTimeLable:
。
有两种方法:
+setTimeLabel:
。但是为了给你一个很好的建议,我们需要更多的信息。你为什么使用类方法? (请不要在评论中添加此内容,但在Q中。)
答案 2 :(得分:0)
尝试此逻辑每秒更新一次。如果那只是应用程序
@implementation ViewController
UILabel *label ;
- (void)viewDidLoad
{
[super viewDidLoad];
label = [[UILabel alloc] initWithFrame:CGRectMake(20, 50, 200, 20)];
[self.view addSubview:label];
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateTimer) userInfo:Nil repeats:YES];
}
- (void)updateTimer{
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
label.text = [dateFormatter stringFromDate:[NSDate date]];
}
答案 3 :(得分:0)
您说您的代码正在调用+[ACPortrait_Orient setTimeLabel:]
,但异常表示您正在调用+[ACPortrait_Orient setTimeLabelPortrait:]
,请检查您真正调用的位置+[ACPortrait_Orient setTimeLabelPortrait:]
,此方法是否会退出?