我想做的事情非常简单。
但是每次我得到一个空数组。仅供参考我还在检查实际保存与否的记录,即使保存结果也是空集。
将记录和存储日期保存为间隔的方法
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编程,所以我也犯了一个愚蠢的错误。
答案 0 :(得分:1)
将newEntry.objectID保存在用户首选项中,然后使用objectID获取ManagedObject。这肯定会成为参赛作品的唯一关键。
答案 1 :(得分:0)
更好的方法是再使用一个列并使用变量为其赋予唯一ID,并将其存储在用户首选项中。我觉得它非常简单实用。