通知中心的NSTimer秒表
问题描述:
我遇到了NSTimer问题,并在通知中心添加了秒表;我对Obj C很陌生,并没有使用Xcode。 Widget编译并运行正常,但推“Start:”什么都不做,并且没有00.00.00。通知中心的NSTimer秒表
#import "BBWeeAppController-Protocol.h"
#import "UIKit/UIKit.h"
static NSBundle *_NCTimerWeeAppBundle = nil;
@interface NCTimerController: NSObject <BBWeeAppController> {
UIView *_view;
UIImageView *_backgroundView;
UILabel *stopWatchLabel;
}
@property (nonatomic, retain) UIView *view;
@property (nonatomic, retain) NSTimer *stopWatchTimer;
@property (nonatomic, retain) NSDate *startDate;
@property (nonatomic, retain) UILabel *stopWatchLabel;
@end
@implementation NCTimerController
@synthesize view = _view;
@synthesize stopWatchTimer = _stopWatchTimer;
@synthesize startDate = _startDate;
@synthesize stopWatchLabel = _stopWatchLabel;
+ (void)initialize {
_NCTimerWeeAppBundle = [[NSBundle bundleForClass:[self class]] retain];
}
- (id)init {
if((self = [super init]) != nil) {
} return self;
}
- (void)dealloc {
[_view release];
[_backgroundView release];
[super dealloc];
}
- (void)loadFullView {
// Add subviews to _backgroundView (or _view) here.
UIButton *start = [UIButton buttonWithType:UIButtonTypeCustom];
[start setTitle:@"Start:" forState:UIControlStateNormal];
start.frame = CGRectMake(0, 0, 79, 33);
[start addTarget:self action:@selector(timerStart) forControlEvents:UIControlEventTouchDown];
[_view addSubview:start];
}
- (void)updateTimer:(NSTimer*)theTimer
{
NSDate *currentDate = [NSDate date];
NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:self.startDate];
NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH:mm:ss.SSS"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
NSString *timeString = [dateFormatter stringFromDate:timerDate];
self.stopWatchLabel.text = timeString;
}
- (void)timerStart
{
self.startDate = [NSDate date];
// Create the stop watch timer that fires every 10 ms
self.stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0
target:self
selector:@selector(updateTimer)
userInfo:nil
repeats:YES];
UIButton *stop = [UIButton buttonWithType:UIButtonTypeCustom];
[stop setTitle:@"Stop:" forState:UIControlStateNormal];
[stop addTarget:self action:@selector(timerStop) forControlEvents:UIControlEventTouchDown];
}
- (void)timerStop
{
[self.stopWatchTimer invalidate];
self.stopWatchTimer = nil;
[self updateTimer];
}
- (void)loadPlaceholderView {
// This should only be a placeholder - it should not connect to any servers or perform any intense
// data loading operations.
//
// All widgets are 316 points wide. Image size calculations match those of the Stocks widget.
_view = [[UIView alloc] initWithFrame:(CGRect){CGPointZero, {316.f, 33.f}}];
_view.autoresizingMask = UIViewAutoresizingFlexibleWidth;
UIImage *bgImg = [UIImage imageWithContentsOfFile:@"/System/Library/WeeAppPlugins/StocksWeeApp.bundle/WeeAppBackground.png"];
UIImage *stretchableBgImg = [bgImg stretchableImageWithLeftCapWidth:floorf(bgImg.size.width/2.f) topCapHeight:floorf(bgImg.size.height/2.f)];
_backgroundView = [[UIImageView alloc] initWithImage:stretchableBgImg];
_backgroundView.frame = CGRectInset(_view.bounds, 2.f, 0.f);
_backgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
[_view addSubview:_backgroundView];
}
- (void)unloadView {
[_view release];
_view = nil;
[_backgroundView release];
_backgroundView = nil;
// Destroy any additional subviews you added here. Don't waste memory :(.
}
- (float)viewHeight {
return 71.f;
}
@end
在此先感谢! 它可能看起来像一个烂摊子,因为它是..
答
我认为你缺少这一行,你创建的NSTimer后:
[self.stopWatchTimer fire];
不知道你的意思是“没有00.00。 00.”虽然。
编辑:我很抱歉忘了,如果你使用scheduledTimerWithTimeInterval,你不需要调用“fire”。但选择必须有签名(你的情况):
- (void)updateTimer:(NSTimer*)theTimer {
...
}
self.stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0
target:self
selector:@selector(updateTimer:)
userInfo:nil
repeats:YES];
定时器将自身发送该消息。试试看。
我已经添加了,但仍然没有。 By,“There is no 00.00.00”我的意思是没有任何东西显示在“开始”旁边: 我的意思是,没有实际的数字会计数? 感谢您的回复。 – Hbrewitt 2013-02-24 09:06:14
我更新了我的答案。 – Odrakir 2013-02-24 09:13:57
我不完全确定我理解如何实现更新的答案? 你能给我一个演练/更好的解释吗? 对不起,如果这听起来粗鲁,我只是相当新的这个.. 谢谢! – Hbrewitt 2013-02-24 09:29:11