【问题标题】:Suggested Logic For Displaying Specific Files on Specific Days在特定日期显示特定文件的建议逻辑
【发布时间】:2021-02-23 15:48:03
【问题描述】:

我正在开发的应用程序将在一年中的每个工作日都有一条每日消息。我将每个工作日的 PDF 保存在名为星期一、星期二、星期三、星期四、星期五的文件夹中。每个 PDF 都被命名为 0.pdf、1.pdf 等,这样我就可以增加一个计数。下面是我的显示代码,但我遇到的问题是每次加载视图时它都会增加计数。在与前一个不同的日期之前不前进到下一个 PDF 的好方法是什么?

- (void)viewDidLoad {
    NSDateFormatter* day = [[NSDateFormatter alloc] init];
    [day setDateFormat: @"EEEE"];
    NSLog(@"the day is: %@", [day stringFromDate:[NSDate date]]);
    NSString *dayString = [day stringFromDate:[NSDate date]];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSInteger whichWeekMonday = [defaults integerForKey:@"DevoWeekMonday"];
    NSInteger whichWeekTuesday = [defaults integerForKey:@"DevoWeekTuesday"];
    NSInteger whichWeekWednesday = [defaults integerForKey:@"DevoWeekWednesday"];
    NSInteger whichWeekThursday = [defaults integerForKey:@"DevoWeekThursday"];
    NSInteger whichWeekFriday = [defaults integerForKey:@"DevoWeekFriday"];
    NSLog(@"Integer Thursday: %ld", (long)whichWeekThursday);
    NSString *whichWeekMondayString = [[NSNumber numberWithInteger:whichWeekMonday] stringValue];
    NSString *whichWeekTuesdayString = [[NSNumber numberWithInteger:whichWeekTuesday] stringValue];
    NSString *whichWeekWednesdayString = [[NSNumber numberWithInteger:whichWeekWednesday] stringValue];
    NSString *whichWeekThursdayString = [[NSNumber numberWithInteger:whichWeekThursday] stringValue];
    NSLog(@"Thursday string: %@", whichWeekThursdayString);
    NSString *whichWeekFridayString = [[NSNumber numberWithInteger:whichWeekFriday] stringValue];

    
    
    
    if ([dayString isEqualToString:@"Monday"]) {
        NSString *Documents = [[NSBundle mainBundle] pathForResource:whichWeekMondayString ofType:@"pdf" inDirectory:@"Mondays"];

       
        NSURL *url = [NSURL fileURLWithPath:Documents];
        NSLog(@"%@",url);
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        [savedweb loadRequest:request];
        NSInteger updatedNumberMonday = whichWeekMonday + 1;
        [defaults setInteger:updatedNumberMonday forKey:@"DevoWeekMonday"];
        [defaults synchronize];
    }
    if ([dayString isEqualToString:@"Tuesday"]) {
        NSString *Documents = [[NSBundle mainBundle] pathForResource:whichWeekTuesdayString ofType:@"pdf" inDirectory:@"Tuesdays"];

       
        NSURL *url = [NSURL fileURLWithPath:Documents];
        NSLog(@"%@",url);
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        [savedweb loadRequest:request];
        NSInteger updatedNumberTuesday = whichWeekTuesday +1;
        [defaults setInteger:updatedNumberTuesday forKey:@"DevoWeekTuesday"];
        [defaults synchronize];
        
    }
    if ([dayString isEqualToString:@"Wednesday"]) {
        NSString *Documents = [[NSBundle mainBundle] pathForResource:whichWeekWednesdayString ofType:@"pdf" inDirectory:@"Wednesdays"];

       
        NSURL *url = [NSURL fileURLWithPath:Documents];
        NSLog(@"%@",url);
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        [savedweb loadRequest:request];
        NSInteger updatedNumberWednesday = whichWeekWednesday +1;
        [defaults setInteger:updatedNumberWednesday forKey:@"DevoWeekWednesday"];
        [defaults synchronize];
        
    }
    if ([dayString isEqualToString:@"Thursday"]) {
        
        // perform some action
        NSString *Documents = [[NSBundle mainBundle] pathForResource:whichWeekThursdayString ofType:@"pdf" inDirectory:@"Thursdays"];

        NSLog(@"File: %@", Documents);
        NSURL *url = [NSURL fileURLWithPath:Documents];
        NSLog(@"%@",url);
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        [savedweb loadRequest:request];
        
        
       
        NSInteger updatedNumberThursday = whichWeekThursday +1;
        [defaults setInteger:updatedNumberThursday forKey:@"DevoWeekThursday"];
        [defaults synchronize];
        
        
    }
    if ([dayString isEqualToString:@"Friday"]) {
        NSString *Documents = [[NSBundle mainBundle] pathForResource:whichWeekFridayString ofType:@"pdf" inDirectory:@"Fridays"];

       
        NSURL *url = [NSURL fileURLWithPath:Documents];
        NSLog(@"%@",url);
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        [savedweb loadRequest:request];
        NSInteger updatedNumberFriday = whichWeekFriday +1;
        [defaults setInteger:updatedNumberFriday forKey:@"DevoWeekFriday"];
        [defaults synchronize];
        
    }
    if ([dayString isEqualToString:@"Saturday"]) {
        
    }
    if ([dayString isEqualToString:@"Sunday"]) {
        
    }
    
  // NSString *Documents = [[NSBundle mainBundle] pathForResource:selectedCountry ofType:@"pdf" inDirectory:@"thepdfpowerpoints"];

    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}

【问题讨论】:

    标签: ios pdf logic plist


    【解决方案1】:

    编辑

    基于您当前的问题,即在每次加载视图时一致地获取计数而不增加:

    我相信让计数保持动态会更好。因此,您将使用您的日期字符串来确定哪个文件夹,然后使用类似这样的方法根据一年中的第几周动态确定哪个编号的 pdf:

    NSDateComponents weekofyearComponents = [[NSCalendar(calendarIdentifier: NSCalendarIdentifierISO8601)] components:(NSCalendarUnitWeekOfYear ) fromDate: [NSDate date]];
    NSInteger whichWeekOfYear = weekofyearComponents.weekOfYear
    

    原答案

    我可以看到几种方法。

    一种方法就像您建议的那样,将一年中的日期数提供给当天的 PDF。这是getting the day of the year in iOS swift的链接。

    另一种方法是获取week of the year number(1-52),然后获取get the day of the week number,这样您就可以按一年中的一周在目录中组织pdf,然后在其中包含一周中每一天的消息编号.

    我的最后一条评论是,对于 iOS 应用程序中的每日消息,PDF 听起来有点沉重或笨拙。一个文本文件可能就足够了,或者一些轻量级的数据库或一些通过 webrequest 更新的缓存来刷新和存储当天的当前和接下来的几条消息。我肯定缺乏上下文,所以我不会否认 PDF 可能正是您需要的事实。

    【讨论】:

    • 好的,我想我已经根据您的一些建议解决了一些问题。我现在将它们分成 5 个文件夹,每个工作日一个。我最好如何让 NSDocumentDirectory 打开第 n 个文件?那么,从 [0] 一直到 [52]?
    • @user717452 我的编辑是否帮助您走上正轨?
    【解决方案2】:

    这是一个示例,其中包含用于获取 Date 值的代码,您需要弄清楚您的显示逻辑。

    基本思想是使用Date值的DateComponents寻找简单的值来做出判断。

    至于你的标准是什么,那是留给 OP 的一个练习,但是这些值可以提供找到你想要的东西的部分。

    使用值的快速入门:

    • .day 将代表日期的数值(例如:3 月 1 日为 1)

    • .weekdayOrdinal 将返回一个值 0 - 6,表示从星期日开始的星期几

    • .weekOfYear 将返回一个介于 1-52 之间的值,指示您在日历年的哪一周。如示例所示,请注意,12 月底的某些日子将被视为发生在次年。您可以添加 yearForWeekOfYear 以查看 iOS 关联的年份。

        // Tweak as needed to obtain the values that work for you
        // It could be something like day, month etc.
        let todayComponents = Calendar.current.dateComponents([.day, .weekOfYear, .weekdayOrdinal],
                                                         from: Date())
        // For today (1 March, 2021) this returns day 1 weekdayOrdinal: 1 weekOfYear 10
        print(todayComponents)
        let newYearsDay = Date(timeIntervalSince1970: 1609540672)
        print(newYearsDay)
        let newYearComponents = Calendar.current.dateComponents([.day, .weekOfYear, .weekdayOrdinal],
                                                                from: newYearsDay)
        // For New Years Day (1 Jan, 2021) this returns day 1 weekdayOrdinal: 1 weekOfYear 1
        print(newYearComponents)
      
        let newYearsEveDay = Date(timeIntervalSince1970: 1640990272)
        let newYearsEveComponents = Calendar.current.dateComponents([.day, .weekOfYear, .weekdayOrdinal],
                                                                from: newYearsEveDay)
        // For New Years Eve Day (31 Dec, 2021) this returns day 31 weekdayOrdinal: 5 weekOfYear 1
        print(newYearsEveComponents)
      

    使用上面获得的值,您可以得到诸如weekdayOrdinal of 1、weekOfYear 10 和day 1(今天)之类的值。然后应用某种逻辑来选择您命名的 PDF,或者通过一些预定义的逻辑将它们分组到文件夹中。

    一个例子:

    • 每天将可用文件除以 7。
    • 这些然后进入编号为 0-6 的文件夹以匹配 weekdayOrdinal
    • 然后在它们前面加上数字 1...n,代表一周的一些递增。然后,您可以选择与当前周匹配的值,或者使用某种溢出逻辑来处理超出当前 weekOfYear 值的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 2014-10-09
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-30
      相关资源
      最近更新 更多