gpt4 book ai didi

ios - 计算跨多个 View Controller ios 花费的时间

转载 作者:行者123 更新时间:2023-11-28 22:00:10 25 4
gpt4 key购买 nike

我有一个 iOS 应用程序,它为有时间限制的用户提供测试。

测试将跨越多个 View Controller ,这些 View Controller 可能会在测试流程中重新打开。我想到了以下流程:

AppDelegate.h中,添加一个NSTimer和在float中花费的时间:

@property (strong, nonatomic) NSTimer *timer;
@property (nonatomic) float timeSpent;

- (void)startTimer;
- (void)stopTimer;

不要忘记 @synthesize 以上内容,在 AppDelegate.m 中创建一个开始和停止计时器函数:

- (void)startTimer {
self.timer = [NSTimer scheduledTimerWithTimeInterval: 0.1f target: self
selector: @selector(updateTime) userInfo: nil repeats: YES];
}
- (void)stopTimer {
[self.timer invalidate];
}

在定期调用的updateTime 函数中,将timeSpent 的值增加1。

最后,在每个 View Controller 中,获取 timeSpent 值并将其格式化为我想要的格式,例如“01min 56s”或“01:56”。

有更简单的方法吗?

注意:

  • 没有可用的互联网连接,测试将持续大约 10 分钟;因此,使用 Google Analytics 是一种矫枉过正,不适用于这种情况

最佳答案

你是正确的,你需要一个 NSTimer 和变量来跟踪全局时间和..您的建议是,将应用程序委托(delegate)用作美化的单例将起作用。

但是请不要这样做,这不是很好的做法。至少在我看来,这篇博文对原因进行了很好的简短描述。 http://www.cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html

如果是我个人,我可能会使用依赖注入(inject)模型并在 viewController 之间传递 NSTimer。 http://www.objc.io/issue-15/dependency-injection.html

简而言之,app delegate 可能是最简单快捷的方法。但如果它不是一个普通的应用程序,我会建议一些更具可扩展性的东西。

希望这有用:)

*编辑单例示例代码。

这应该在单例类的顶部进行初始化。

@interface
@property (nonatomic, strong) NSTimer *myTimer;
@end

@implementation MySingletonClass

+ (instancetype)shared
{
static MySingletonClass *_shared = nil;
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
_shared = [[self alloc] init];
// any other initialisation you need
});
return _shared;
}

- (void)startTimer {
self.myTimer = [NSTimer scheduledTimerWithTimeInterval: 0.1f target: self
selector: @selector(updateTime) userInfo: nil repeats: YES];
}
- (void)stopTimer {
[self.myTimer invalidate];
}

然后你可以像这样从程序中的任何其他类访问它

#import "MySingletonClass.h"

//some method
- (void)myMethod
{
CGFloat currentTime = [MySingletonClass shared].globalTimeProperty;
// do something with the time
}

-(void)startTimer
{
[[MySingletonClass shared] startTimer];
}

-(void)updateTime
{
// do your update stuff here
}

单例标题

@interface
@property (nonatomic, assign) CGFloat globalTimeProperty;

+ (instancetype)shared;
- (void)startTimer;
- (void)stopTimer;

@end

我可能遗漏了一些东西,但它应该足以让你继续。

关于ios - 计算跨多个 View Controller ios 花费的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25379482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com