【问题标题】:How to retrieve data from plist in iOS programmatically?如何以编程方式从 iOS 中的 plist 中检索数据?
【发布时间】:2013-03-16 05:07:00
【问题描述】:

我想比较两个日期,即我的 plist 中的当前日期和日期。如果我的 plist 中的当前日期和日期相等,那么我想显示一些东西。有可能吗?

plist 中的层次结构是 Array->Dictionary->(对象是被视为一个数组的联系人,所有对象的键应该相同,并且它是一个字符串)。我想将密钥与当前日期进行比较。

【问题讨论】:

  • 到目前为止您尝试过什么?你知道如何比较两个日期吗?你知道如何加载 plist 文件吗?显示您目前拥有的代码(与此需求相关)。

标签: ios date compare plist


【解决方案1】:

您可以使用以下代码。

NSString *path = [[NSBundle mainBundle] pathForResource:@"EventAddress" ofType:@"plist"]; 
NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:path];

NSArray* allmyKeys = [myDictionary  allValues];
NSLog(@"%@", allmyKeys);
NSLog(@"%@", [[allmyKeys objectAtIndex:0] objectAtIndex:0]);

从 plis 获取日期 您的 plist 日期应包含如下内容:

<date>2011-12-13T00:00:00Z</date>

并从 NSDictionary 使用获取日期:

NSDate *eventDate = [myDictionary objectForKey:@"date"];

并比较两个日期使用:

switch ([[NSDate date] compare:eventDate]){
 case NSOrderedAscending:
      NSLog(@"NSOrderedAscending");
break;
case NSOrderedSame:
      NSLog(@"NSOrderedSame");
break;
case NSOrderedDescending:
     NSLog(@"NSOrderedDescending");
break;
}

【讨论】:

  • 这仅显示如何加载 plist。问题是关于获取日期并将其与当前日期进行比较。
【解决方案2】:

为了满足这个“plist中的层次结构是Array->Dictionary->(对象将被视为一个数组的联系人,并且所有对象的键都应该相同,并且它是一个字符串)。我想比较当前日期的密钥”,您需要按照以下步骤操作

  1. 从 .plist 文件中获取所有数组
  2. 获取当前数组对象中的所有字典
  3. 获取当前字典对象中的所有键
  4. 使用NSComparisonResult比较您的密钥和当前日期

    NSDate *date1 = < YOUR CURRENT DATE HERE > ;
    NSString *plistFilePath  = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"SyncAuditMainScreen.plist"];
    
    NSArray *array = [NSArray arrayWithContentsOfFile:plistFilePath];
    for(int i=0;i<[array count];i++)
    {
        NSMutableDictionary *details=[array objectAtIndex:i];
        NSArray *allmyKeys = [details allKeys];
        for(NSString *key in allmyKeys)
        {
            NSLog(@"KEY: %@",key);
            NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
            [formatter setDateFormat:< YOUR FORMAT OF DATE >];
            NSDate *date2 = [formatter dateFromString:key];
            NSComparisonResult result = [date1 compare:date2];
            if(result==NSOrderedSame)
                NSLog(@"Key and current date are same");
        }
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 2012-11-01
    相关资源
    最近更新 更多