使用来自 Core Data 的日期获取记录
Posted
技术标签:
【中文标题】使用来自 Core Data 的日期获取记录【英文标题】:Fetching an record using date from Core Data 【发布时间】:2013-11-20 21:14:55 【问题描述】:我想做的很简单。
-
我正在核心数据表中保存一条记录。
在用户默认值中将记录日期保存为时间间隔。
尝试使用间隔再次检索记录,即在日期中进行转换。
但是,每次我得到一个空数组。仅供参考,我也在检查记录是否实际保存,即使保存了结果也是空集。
将记录和存储日期保存为间隔的方法
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];
我在谓词中尝试了 == to 但没有奏效。它每次都给我返回一个空数组。我最近才开始在 Objective-c 中编程,所以我也可能犯了一个愚蠢的错误。
【问题讨论】:
为什么是时间间隔和字符串? 【参考方案1】:将 newEntry.objectID 保存在用户首选项中,然后使用 objectID 获取 ManagedObject。这肯定是条目的唯一键。
【讨论】:
这是正确的方法。另一种选择是直接将 NSDate 保存在用户默认值中,而不是将其转换为 NSTimeInterval 然后将其转换为 NSString。 对不起,我试过了,但用户首选项不保存 ID 或其 URI 表示。【参考方案2】:更好的方法是增加一列并使用变量为其赋予唯一的 id 并将其存储在用户首选项中。我发现它非常简单和有用。
【讨论】:
以上是关于使用来自 Core Data 的日期获取记录的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring Data JPA 获取两个日期之间的记录
将 `lastModified` 记录添加到 Core Data 托管对象