【发布时间】:2018-05-20 00:15:18
【问题描述】:
首先抱歉标题不准确,但我会尽量准确地描述我的问题。
我正在开发一个应用来管理成本/费用。在这种情况下,我在 viewdidload 方法中有这个 block:
到目前为止我得到的一段代码:
-(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方法之外,以便在需要时执行该块
【问题讨论】:
-
"这个块在viewdidload中,所以每次app启动都会执行"当然。这就是
viewDidLoad的意思。实际上,它的意思是,每次这个视图控制器出现并获得它的视图。如果那不是您想要运行代码的时候,那么这是一个放置它的愚蠢的地方。 — “也许这个块需要在 viewdidload 方法之外,以便在需要的时候执行该块” 好的,那么什么时候需要呢?如果您能告诉我们,我们可以建议将代码放置在何处以便它运行。 -
嗨,马特 :)。谢谢回复。所以我会告诉你,基本上当用户启动应用程序时,该块会检查是否选择了每日、每周或每月频率。基于此,交换机将确定在哪一天需要提高限制。当限制已经提高时,将不会执行此块。我不确定现在是否更有意义:)
标签: ios objective-c viewdidload