2015-12-18 6 views
1

Я начинаю проект разработки часов. В основном это будет запуск и остановка нескольких таймеров на часах. Исходный код отлично работает на 42-миллиметровом симуляторе, но не на фактических часах. То есть нажатие на кнопку «Пуск» запускает ярлык WKInterfaceTimer. На физических часах ничего не происходит. Тем не менее, я знаю, что таймер работает, потому что если я проверю Enabled в InterfaceBuilder, таймер начнет увеличиваться, как только приложение запустится на часах. Вот код для просмотра приложений extension.h и .m. Розетка правильно подключена в IB. Кроме того, нажатие кнопки «Отправка» входит в диспетчерский IBAction и работает правильно. Я также попробовал отключить питание и включить часы. Это не помогает.Apple часы wkinterfacetimer не запускается

Я бы очень признателен за помощь в этом.

интерфейс controller.h

/ 
/
/
/
/
/
#import <WatchKit/WatchKit.h> 
#import <Foundation/Foundation.h> 
@interface InterfaceController : WKInterfaceController 
@property (unsafe_unretained, nonatomic) IBOutlet WKInterfaceTimer *ElapsedTime; 
@property (unsafe_unretained, nonatomic) IBOutlet WKInterfaceLabel *dispatchTime; 
@property (weak, nonatomic) NSDate *startDate; 
@end 
/
/
/
interface controller.m 
/
/
/
/
#import "InterfaceController.h" 
@interface InterfaceController() 
@end 
@implementation InterfaceController 
- (void)awakeWithContext:(id)context { 
    [super awakeWithContext:context]; 
    /
} 
- (void)willActivate { 
    /
    [super willActivate]; 
} 
- (void)didDeactivate { 
    /
    [super didDeactivate]; 
} 
- (IBAction)Start { 
    self.startDate = [NSDate date]; 
    [self.ElapsedTime setDate:self.startDate]; 
    [self.ElapsedTime start]; 
} 
- (IBAction)Stop { 
    [self.ElapsedTime stop]; 
} 
- (IBAction)Dispatch { 
    NSDate *date =[NSDate date]; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateStyle:NSDateFormatterNoStyle]; 
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
    NSString *dateString = [dateFormatter stringFromDate:date]; 
    [self.dispatchTime setText:dateString]; 
} 
@end 

ответ

1

До сих пор не знаю, почему объект WKInterfaceTimer не работает. Вместо этого я использовал стандартный объект NSTimer и стандартный объект NSDate. Код работает. Примечание. Если у вас есть другая сценаристская сцена, основанная на странице, с которой связана первая сцена, вам нужно добавить собственный объект WkInterfaceController к следующему сценарию и подключить к нему выходы из раскладной панели интерфейса. В противном случае выходы не будут подключаться, потому что владелец файла неверен. Кроме того, убедитесь, что вы добавили пользовательский WkInterfaceController к цели расширения набора часов, а не к цели iOS.

// 
// InterfaceController.h 
// EMSTimers WatchKit 1 Extension 
// 
// Created by Nelson Capes on 12/18/15. 
// Copyright © 2015 Nelson Capes. All rights reserved. 
// 

#import <WatchKit/WatchKit.h> 
#import <Foundation/Foundation.h> 

@interface InterfaceController : WKInterfaceController 
@property (weak, nonatomic) IBOutlet WKInterfaceLabel *ElapsedTime; 

@property (strong, nonatomic) IBOutlet WKInterfaceLabel *dispatchTime; 
@property (strong, nonatomic) NSDate *startDate; 
@property (strong, nonatomic) NSDate *dateStarted; 
@property (strong, nonatomic) NSTimer *elaspsedTimer; 
@end 

    // 
// InterfaceController.m 
// EMSTimers WatchKit 1 Extension 
// 
// Created by Nelson Capes on 12/18/15. 
// Copyright © 2015 Nelson Capes. All rights reserved. 
// 

#import "InterfaceController.h" 


@interface InterfaceController() 

@end 


@implementation InterfaceController 

- (void)awakeWithContext:(id)context { 
    [super awakeWithContext:context]; 

    // Configure interface objects here. 
} 
- (IBAction)Start { 
    NSDate *date =[NSDate date]; 
    self.dateStarted = date; 
    NSTimeInterval timeInterval = 1.0; 
    self.elaspsedTimer = [NSTimer scheduledTimerWithTimeInterval:timeInterval target:self selector:@selector(calculateTimer:) userInfo:self.elaspsedTimer repeats:YES]; 
    [self.elaspsedTimer fire]; 
} 
- (IBAction)Stop { 
    [self.elaspsedTimer invalidate]; 
} 
-(void)calculateTimer:(NSTimer *)theTimer 
{ 

    NSTimeInterval interval = [self.dateStarted timeIntervalSinceNow]; 
    interval = (-1 * interval); 

    int time = round(interval); 
    div_t h = div(time, 3600); //seconds total, divided by 3600 equals 
    int hours = h.quot;   // hours, divided by 60 equals 
    div_t m = div(h.rem, 60); // minutes 
    int minutes = m.quot; 
    int seconds = m.rem;  // and remainder is seconds 


    NSString *intervalString = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds]; 
    [self.ElapsedTime setText:intervalString]; 
} 
- (void)willActivate { 
    // This method is called when watch view controller is about to be visible to user 
    [super willActivate]; 
} 

- (void)didDeactivate { 
    // This method is called when watch view controller is no longer visible 
    [super didDeactivate]; 
} 

@end 
Смежные вопросы