Ios 在Objective C中保存Json数据的问题

Ios 在Objective C中保存Json数据的问题,ios,objective-c,Ios,Objective C,我是Objective C的初学者,我尝试从Json保存数据。我做得很好,我的程序从互联网上的Json获取数据并保存。然而,当我关闭应用程序并在没有互联网的情况下再次启动它时,它尝试再次下载并保存它,而不是加载数据(我认为数据已被删除) 这是我的代码: - (NSData *)saveAllScheduleData:(NSString *)endpointOfTheChannel { NSData *channelData; NSDateFormatter *dateForma

我是Objective C的初学者,我尝试从Json保存数据。我做得很好,我的程序从互联网上的Json获取数据并保存。然而,当我关闭应用程序并在没有互联网的情况下再次启动它时,它尝试再次下载并保存它,而不是加载数据(我认为数据已被删除)

这是我的代码:

- (NSData *)saveAllScheduleData:(NSString *)endpointOfTheChannel {
    NSData *channelData;

    NSDateFormatter *dateFormatDuration = [[NSDateFormatter alloc] init];
    [dateFormatDuration setDateFormat:@"HH:mm:ss"];
    NSDate *duration = [dateFormatDuration dateFromString:@"23:59:59"];
    NSDate *dateOfSave = [[NSUserDefaults standardUserDefaults] valueForKey:@"dateOfSave"];
    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSDate *currentDate = [NSDate date];
    [calendar components:(NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond) fromDate:currentDate];

    NSDateComponents *comps = [calendar components:(NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond) fromDate:duration];
    NSDate *nextSaveDate = [calendar dateByAddingComponents:comps toDate:dateOfSave options:0];

    NSString *url = [NSString stringWithFormat:@"https://apis.is%@", endpointOfTheChannel];
    if ([[NSUserDefaults standardUserDefaults] valueForKey: url] && [currentDate compare:nextSaveDate] == NSOrderedAscending) {
        return channelData = [[NSUserDefaults standardUserDefaults] valueForKey: url];
    } else {
        channelData = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
        [calendar components:(NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond) fromDate:dateOfSave];
        [[NSUserDefaults standardUserDefaults] setObject:dateOfSave forKey:@"dateOfSave"];
        [[NSUserDefaults standardUserDefaults] setObject:channelData forKey:url];
        return channelData;
    }
}
是的,我也试着每天重新加载数据,但是现在有了这个bug,这是没有用的


谢谢您的帮助。

您需要将用户默认值与呼叫同步

[[NSUserDefaults standardUserDefaults] synchronize]

当您保存它时。

您的
if语句中有两个条件

可能是第二个条件不符合要求。(正如你确认的那样,它不起作用。所以这就是答案)

其次,当您将任何数据保存在
NSUserDefaults
中时,请使用适当的
键进行存储。您正在将变量
NSString*url
用作
Key
。这可能会随时更改,您将无法从该
键访问
NSUserDefaults
。它可能是一个常量
,就像您用来保存
保存日期


希望你得到它

你是如何关闭应用程序的?我双击主按钮并关闭应用程序你的
if语句中有两个条件。可能是第二个条件不符合你说得对,第二个条件不太好,谢谢