ios - 如何避免执行 viewDidLoad 中的这个“if”块?
问题描述
首先很抱歉标题不准确,但我会尽量准确地描述我的问题。
我正在开发一个应用程序来管理成本/费用。在这种情况下,我在viewdidload
:
关于我到目前为止得到的一段代码:
-(void)viewDidLoad {
[super viewDidLoad];
if([[self getfrequencyselected] isEqualToString:@"Daily"] && [self limitneedstoberaised]){
NSDateComponents *component = [[NSCalendar currentCalendar] components:NSCalendarUnitWeekday fromDate:[NSDate date]];
switch ([component weekday]) {
case 1:[self raisedaylimit];
break;
case 2: [self raisedaylimit];
break;
--- etc,etc ---
default:
break;
}
}
}
-(BOOL)limitneedstoberaised{
/*
Something like this:
If today's date is the same as the date stored in the SQLite DB (LASTUPDATEDATE column),
then return FALSE, else return TRUE;
[[NSCalendar currentCalendar] isDate:date1 inSameDayAsDate:date2];
*/
}
- 基本上,如果用户之前选择了每天跟踪成本,请输入该切换案例。- 在 switch 案例 1、2 等中表示一周中的几天,因此它应该在过去的每一天提高指定的成本限制。
我的问题:
此块位于 中viewdidload
,因此每次启动应用程序时都会执行它。
因此,我的问题是,[self raisedaylimit]
每次用户启动应用程序时都会调用它,所以我想避免这种情况,就像逻辑所说的那样,每天只执行一次。
可能的解决方案:
- 我曾考虑过创建一个 NSUserDefaults 对象来跟踪该
raisedaylimit
方法何时被调用,在 YES 和 NO 之间切换,但这似乎很复杂。 - 我认为也许这个块需要在
viewdidload
方法之外,以便在需要时执行该块
解决方案
您的第一个想法是正确的,您需要在应用程序之外存储上次提高限制的日期- 而在用户默认值中是显而易见的地方。
您的代码将读取存储的日期,获取当前日期,并计算它们之间的天数 - 阅读NSDate
文档,有一些方法可以确定两个日期之间的差异到某种粒度(小时、天等),您NSDate
在进行差异计算之前,不需要通过自己剥离时间分量来减少值。
在应用启动时调用您的代码。如果您需要允许您的应用程序在午夜之后运行并且需要在第二次(或第三次等)时间提高限制,您的代码应该计算到午夜的时间并设置一个NSTimer
以再次调用自己。
如果您在设计解决方案时遇到困难,请使用您开发的代码提出一个新问题、您的问题是什么等,届时无疑会有人帮助您。
推荐阅读
- python - Why can't I activate gym form
- path - Webpack 中字体配置的文件加载器
- django - 使用序列化程序在对 Django Rest-Api 的发布请求中获取“错误请求”
- c# - Xamarin Android:在滑动删除之前显示警报
- r - 强制日期作为读取非分隔文本文件的新行
- java - 如何使用不同的参数将一个类调用到另一个类中?
- dependency-injection - 在依赖 .NET Standard 库的 Azure Function 中,如何在依赖的 .NET Standard Lib 中使用 ILogger 登录?
- c# - 如何在 .NET Framework 中设置 WebBrowser 对象以使用用户系统上安装的任何最高版本的 IE
- hp-uft - 单击 UFT 中的“运行”按钮 - 没有任何反应
- sybase - sybase 交互式sql初始化错误(java路径)