Ios 创建一个';NSTimer';独生子女班

Ios 创建一个';NSTimer';独生子女班,ios,objective-c,Ios,Objective C,我有一个“NSTimer”,我希望在切换到其他视图控制器时能够运行它。我创建了一个singleton类,其中包含以下代码。首先是H,然后是M // ApplicationManager.h // License // // Created by Connor Gosell on 7/31/13. // Copyright (c) 2013 Connor Gosell. All rights reserved. // #import <Foundation/Foundation.h

我有一个“NSTimer”,我希望在切换到其他视图控制器时能够运行它。我创建了一个singleton类,其中包含以下代码。首先是H,然后是M

//  ApplicationManager.h
//  License
//
//  Created by Connor Gosell on 7/31/13.
//  Copyright (c) 2013 Connor Gosell. All rights reserved.
//

#import <Foundation/Foundation.h>
@interface ApplicationManager : NSObject{
NSTimer *ticker;
}

+(ApplicationManager*) instance;



@end
现在查看Controller.H文件

//  ApplicationManager.m
//  License
//
//  Created by Connor Gosell on 7/31/13.
//  Copyright (c) 2013 Connor Gosell. All rights reserved.
//
#import "ApplicationManager.h"
@implementation ApplicationManager
static ApplicationManager* appMgr = nil;

+(ApplicationManager*) instance
{
@synchronized([ApplicationManager class])
{
    if(!appMgr)
    {
        appMgr = [[self alloc] init];
    }

    return appMgr;
}
}
return nil;
//}


+(id) alloc
{
@synchronized([ApplicationManager class])
{
    NSAssert((appMgr == nil), @"Only one instance of singleton class may be    instantiated.");
    appMgr = [super alloc];
    return appMgr;
}
}

-(id) init
{
if(!(self = [super init]))
{
    [self release];
    return nil;
}

return self;
}
//  ViewController.h
//  License
//
//  Created by Connor Gosell on 7/2/13.
//  Copyright (c) 2013 Connor Gosell. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "ApplicationManager.h"
@interface ViewController : UIViewController{

IBOutlet UILabel *time;
NSTimer *ticker;
}

- (IBAction)start;
- (IBAction)reset;


- (void)showActivity;


@end
//  ViewController.m
//  License
//
//  Created by Connor Gosell on 7/2/13.
//  Copyright (c) 2013 Connor Gosell. All rights reserved.
//

#import "ViewController.h"
#import "ApplicationManager.h"
@interface ViewController ()

@end

@implementation ViewController

-(IBAction) start
{
[[ApplicationManager instance]ticker ]:[NSTimer scheduledTimerWithTimeInterval:1.0    target:[ApplicationManager Class]selector:@selector(showActivity) userInfo:nil    repeats:YES];
}

-(IBAction)reset
{
[[ApplicationManager instance]ticker: invalidate];
time.text = @" 0:00";
}

-(void) showActivity
{
int currentTime = [time.text intValue];
int newTime = currentTime + 1;
time.text = [NSString stringWithFormat:@"%d", newTime];
}




- (void)viewDidLoad
{
[super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end
/*-(IBAction) start
{
[[ApplicationManager instance] setTicker:[NSTimer scheduledTimerWithTimeInterval:1.0   target:self    ``selector:@selector(showActivity) userInfo:nil repeats:YES]];
}

-(IBAction) reset
{
[[[ApplicationManager instance] ticker] invalidate];
time.text = @" 0:00";
}

-(void) showActivity
{
int currentTime = [time.text intValue];
int newTime = currentTime + 1;
time.text = [NSString stringWithFormat:@"%d", newTime];
}

*/
我的问题是,当我尝试在iphone上运行应用程序时,它会返回错误:没有可见的@interface声明选择器“ticker” 和:使用未声明的标识符“invalidate” 这两个错误都发生在iActions启动和重置的Viewcontroller.M文件中 我似乎找不到解决这些错误的办法。有什么解决办法吗

没有可见的@interface声明选择器“ticker”

您试图调用一个不存在的方法:

[[ApplicationManager instance]ticker ]
这相当于:

[[ApplicationManager instance] ticker]
您是否在ApplicationManager.h中看到名为
-ticker
的方法?我不。也许你是想把ivar声明为财产或其他什么?这句话的其余部分很混乱,我不知道你想做什么

使用未声明的标识符“invalidate”

那句话真的毫无意义。我想你的意思是:

[[ApplicationManager instance].ticker invalidate];
但这也行不通,因为如上所述,ApplicationManager.h中目前没有声明
ticker
属性或方法


还有,你为什么要首先创建这个单身汉?你所拥有的只是一个定时器,而定时器并不是那种你需要从很多地方访问的东西(这也不是单身的一个很好的理由)。摆脱单例胡说八道,在视图控制器中实例化计时器,并对更简单、更可维护的代码感到满意。

您有很多代码,但似乎没有问题。@Caleb补充了一些详细信息。正在通过xcode查找它!感谢大家的支持,C++/Java的等价物
[[ApplicationManager instance]ticker:invalidate]
ApplicationManager::instance()->ticker(invalidate)
你真的想要
ApplicationManager::instance()->ticker()->invalidate()
,也就是
[[ApplicationManager instance]ticker]invalidate]
我并非有意粗鲁,但在我看来,您的根本问题在于不懂Objective-C语法。我建议您通过一些教科书或教程来学习该语言,这样您就可以关注实际构建应用程序。当我在视图控制器中实例化计时器时,请转到其他视图,然后再次返回视图,计时器不会继续运行。@Gosell1,计时器没有运行,因为您可能没有“再次返回视图”,您正在创建一个新实例。您需要在视图控制器之间来回移动,以使带有计时器的视图控制器在离开视图控制器时不会解除分配。
[[ApplicationManager instance].ticker invalidate];