使用Core Data中的日期获取记录

时间:2013-11-20 21:14:55

标签: ios objective-c sqlite core-data

我想做的事情非常简单。

  1. 我正在Core-Data表中保存记录。
  2. 将记录日期保存为用户默认值中的时间间隔。
  3. 尝试使用Interval再次检索记录,即在Date中转换。
  4. 但是每次我得到一个空数组。仅供参考我还在检查实际保存与否的记录,即使保存结果也是空集。

    将记录和存储日期保存为间隔的方法

    RequestInfo * newEntry = [NSEntityDescription insertNewObjectForEntityForName:@"RequestInfo"inManagedObjectContext:self.managedObjectContext];
    
    newEntry.jukeboxPhoneNo = request.L;
    newEntry.trackName = request.TN;
    newEntry.trackNo = request.T;
    newEntry.date = [NSDate date];
    
    NSTimeInterval lastID = [newEntry.date timeIntervalSince1970];
    NSUserDefaults* prefs = [NSUserDefaults standardUserDefaults];
    [prefs setObject:[NSString stringWithFormat:@"%f", lastID] forKey:LAST_REQUEST_ID_KEY];
    [prefs synchronize];   
    
    if (![self.managedObjectContext save:&error]) {
        NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
    }
    else {
        NSLog(@"Object is saved");
    }
    

    回复记录的方法

    NSUserDefaults* prefs = [NSUserDefaults standardUserDefaults];
    NSString* lastDateInterval = (NSString*)[prefs objectForKey:LAST_REQUEST_ID_KEY];
    NSTimeInterval lastID = [lastDateInterval doubleValue];
    NSLog(@"Last ID %f", lastID);
    // Check it
    if(lastID!=0) {
        NSDate* soughtDate =[[NSDate alloc] initWithTimeIntervalSince1970:lastID];
    
        NSEntityDescription *productEntity=[NSEntityDescription entityForName:@"RequestInfo" inManagedObjectContext:self.managedObjectContext];
    
        NSFetchRequest *fetch=[[NSFetchRequest alloc] init];
        [fetch setEntity:productEntity];
    
        NSPredicate *p= [NSPredicate predicateWithFormat:@"(date >=%@) AND (date <= %@)", soughtDate, soughtDate];
        [fetch setPredicate:p];
        NSError *fetchError;
        NSArray *fetchedProducts = [self.managedObjectContext executeFetchRequest:fetch error:&fetchError];
        RequestInfo* request = [fetchedProducts objectAtIndex:0];
    

    我在谓词中尝试过==但是没有用。它每次都给我一个空数组。我最近开始在objective-c编程,所以我也犯了一个愚蠢的错误。

2 个答案:

答案 0 :(得分:1)

将newEntry.objectID保存在用户首选项中,然后使用objectID获取ManagedObject。这肯定会成为参赛作品的唯一关键。

答案 1 :(得分:0)

更好的方法是再使用一个列并使用变量为其赋予唯一ID,并将其存储在用户首选项中。我觉得它非常简单实用。