有没有办法在iOS的CoreData中存储一周前的数据(如CMStepCounter中的步行步(7天数据))呢?

有没有办法在iOS的CoreData中存储一周前的数据(如CMStepCounter中的步行步(7天数据))呢?,ios,objective-c,core-data,Ios,Objective C,Core Data,我需要在核心数据中存储一周的备份数据(NSDictionary/NSMUtableArray) 例如:今天的日期:2016年1月15日 我需要存储(2016年1月14日至2016年1月8日)的数据。现在的数据不需要存储在核心数据中 另一个例子 比如:如果2016年第16届==>意味着我需要存储从2016年第15届到2016年第9届的数据 如果有人知道解决方案/示例代码。我建议您在数据条目中添加creationDate属性。 当用户生成数据时,可以将当前日期与用户数据一起保存。 偶尔(例如,在应用

我需要在核心数据中存储一周的备份数据(NSDictionary/NSMUtableArray)

例如:今天的日期:
2016年1月15日

我需要存储(
2016年1月14日至2016年1月8日)的数据。现在的数据不需要存储在核心数据中

另一个例子 比如:如果
2016年第16届
==>意味着我需要存储从
2016年第15届到2016年第9届的数据


如果有人知道解决方案/示例代码。

我建议您在数据条目中添加
creationDate
属性。 当用户生成数据时,可以将当前日期与用户数据一起保存。 偶尔(例如,在应用程序启动时,每天仅一次),您可以检查超过一周的条目并将其删除

首先,你需要一周前的参考日期。您应该能够得到如下结果:

NSCalendar       *calendar;
NSDateComponents *comps;
NSDate           *oneWeekAgo;

calendar   = [NSCalendar currentCalendar];
comps      = [[NSDateComponents alloc] init];
[comps setDay:-8];

oneWeekAgo = [calendar
              dateByAddingComponents:comps
                              toDate:[NSDate date]
                             options:0];
[comps release];
然后,您需要获取比引用的
creationDate
(旧)小的所有条目:

NSArray        *oldEntries;
NSFetchRequest *fetchRequest;
NSPredicate    *predicate;

fetchRequest = [[NSFetchRequest alloc]
                initWithEntityName:@"<your entry name>"];
predicate    = [NSPredicate predicateWithFormat:
                @"creationDate < %@", oneWeekAgo];
[fetchRequest setPredicate:predicate];
oldEntries   = [moc executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];
NSArray*旧条目;
NSFetchRequest*fetchRequest;
NSPredicate*谓词;
fetchRequest=[[NSFetchRequest alloc]
initWithEntityName:@“”;
谓词=[NSPredicate谓词格式:
@“creationDate<%@”,oneWeekAgo];
[FetchRequestSetPredicate:谓词];
oldEntries=[moc executeFetchRequest:fetchRequest错误:&错误];
[请求释放];
然后,您可以使用删除每个旧条目
[NSManagedObjectContext deleteObject:
我建议您在数据条目中添加一个
creationDate
属性。 当用户生成数据时,可以将当前日期与用户数据一起保存。 偶尔(例如,在应用程序启动时,每天仅一次),您可以检查超过一周的条目并将其删除

首先,你需要一周前的参考日期。您应该能够得到如下结果:

NSCalendar       *calendar;
NSDateComponents *comps;
NSDate           *oneWeekAgo;

calendar   = [NSCalendar currentCalendar];
comps      = [[NSDateComponents alloc] init];
[comps setDay:-8];

oneWeekAgo = [calendar
              dateByAddingComponents:comps
                              toDate:[NSDate date]
                             options:0];
[comps release];
然后,您需要获取比引用的
creationDate
(旧)小的所有条目:

NSArray        *oldEntries;
NSFetchRequest *fetchRequest;
NSPredicate    *predicate;

fetchRequest = [[NSFetchRequest alloc]
                initWithEntityName:@"<your entry name>"];
predicate    = [NSPredicate predicateWithFormat:
                @"creationDate < %@", oneWeekAgo];
[fetchRequest setPredicate:predicate];
oldEntries   = [moc executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];
NSArray*旧条目;
NSFetchRequest*fetchRequest;
NSPredicate*谓词;
fetchRequest=[[NSFetchRequest alloc]
initWithEntityName:@“”;
谓词=[NSPredicate谓词格式:
@“creationDate<%@”,oneWeekAgo];
[FetchRequestSetPredicate:谓词];
oldEntries=[moc executeFetchRequest:fetchRequest错误:&错误];
[请求释放];
然后,您可以使用删除每个旧条目
[NSManagedObjectContext deleteObject:

m班

- (NSManagedObjectContext *)managedObjectContext {
NSManagedObjectContext *context = nil;
id delegate = [[UIApplication sharedApplication] delegate];
if ([delegate performSelector:@selector(managedObjectContext)]) {
    context = [delegate managedObjectContext];
}
return context;
}

 - (void)viewDidLoad{
[super viewDidLoad];
NSDate *sevenDaysBeforeDate = [NSDate dateWithTimeIntervalSinceNow: -  (60.0f*60.0f*24.0f*7)];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(date >= %@) AND (date <= %@)", sevenDaysBeforeDate, [NSDate date]];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor   sortDescriptorWithKey:@"date" ascending:NO];
NSFetchRequest *request = [[NSFetchRequest alloc] init] ;
request.sortDescriptors = @[sortDescriptor];
[request setEntity:[NSEntityDescription entityForName:@"Device" inManagedObjectContext:[self managedObjectContext]]];
[request setPredicate:predicate];
NSError *error = nil;
NSArray *results = [[self managedObjectContext] executeFetchRequest:request error:&error];
Device *newDevice =[results objectAtIndex:0];
NSString *nameStr = newDevice.name;
NSLog(@"%@",nameStr);
// Do any additional setup after loading the view.
if (self.device) {
    [self.nameTextField setText:[self.device valueForKey:@"name"]];
    [self.versionTextField setText:[self.device valueForKey:@"version"]];
    [self.companyTextField setText:[self.device valueForKey:@"company"]];
}
 }
 - (IBAction)save:(id)sender {
NSDateFormatter* df = [[NSDateFormatter alloc]init];
df.dateFormat = @"MM/dd/yyyy";
  self.dateStringRef = [df stringFromDate:[NSDate date]];  // Don't use     leading caps on variables
//NSLog(@"%@", self.dateStringRef);
NSManagedObjectContext *context = [self managedObjectContext];
    // Create a new device
NSManagedObject *newDevice = [NSEntityDescription    insertNewObjectForEntityForName:@"Device" inManagedObjectContext:context];
    [newDevice setValue:self.nameTextField.text forKey:@"name"];
    [newDevice setValue:self.versionTextField.text forKey:@"version"];
    [newDevice setValue:self.companyTextField.text forKey:@"company"];
    [newDevice setValue:[NSDate date] forKey:@"date"];

NSError *error = nil;
// Save the object to persistent store
if (![context save:&error]) {
    NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}
[self.navigationController popViewControllerAnimated:YES];
 }
-(NSManagedObjectContext*)managedObjectContext{
NSManagedObjectContext*上下文=nil;
id delegate=[[UIApplication sharedApplication]delegate];
if([delegate performSelector:@selector(managedObjectContext)]){
上下文=[delegate managedObjectContext];
}
返回上下文;
}
-(无效)viewDidLoad{
[超级视图下载];
NSDate*sevenDaysBeforeDate=[NSDate DATE WITH TIME INTERVALICENSNOW:-(60.0f*60.0f*24.0f*7)];
NSPredicate*谓词=[NSPredicate谓词格式:@”(日期>=%@)和(日期
m班

- (NSManagedObjectContext *)managedObjectContext {
NSManagedObjectContext *context = nil;
id delegate = [[UIApplication sharedApplication] delegate];
if ([delegate performSelector:@selector(managedObjectContext)]) {
    context = [delegate managedObjectContext];
}
return context;
}

 - (void)viewDidLoad{
[super viewDidLoad];
NSDate *sevenDaysBeforeDate = [NSDate dateWithTimeIntervalSinceNow: -  (60.0f*60.0f*24.0f*7)];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(date >= %@) AND (date <= %@)", sevenDaysBeforeDate, [NSDate date]];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor   sortDescriptorWithKey:@"date" ascending:NO];
NSFetchRequest *request = [[NSFetchRequest alloc] init] ;
request.sortDescriptors = @[sortDescriptor];
[request setEntity:[NSEntityDescription entityForName:@"Device" inManagedObjectContext:[self managedObjectContext]]];
[request setPredicate:predicate];
NSError *error = nil;
NSArray *results = [[self managedObjectContext] executeFetchRequest:request error:&error];
Device *newDevice =[results objectAtIndex:0];
NSString *nameStr = newDevice.name;
NSLog(@"%@",nameStr);
// Do any additional setup after loading the view.
if (self.device) {
    [self.nameTextField setText:[self.device valueForKey:@"name"]];
    [self.versionTextField setText:[self.device valueForKey:@"version"]];
    [self.companyTextField setText:[self.device valueForKey:@"company"]];
}
 }
 - (IBAction)save:(id)sender {
NSDateFormatter* df = [[NSDateFormatter alloc]init];
df.dateFormat = @"MM/dd/yyyy";
  self.dateStringRef = [df stringFromDate:[NSDate date]];  // Don't use     leading caps on variables
//NSLog(@"%@", self.dateStringRef);
NSManagedObjectContext *context = [self managedObjectContext];
    // Create a new device
NSManagedObject *newDevice = [NSEntityDescription    insertNewObjectForEntityForName:@"Device" inManagedObjectContext:context];
    [newDevice setValue:self.nameTextField.text forKey:@"name"];
    [newDevice setValue:self.versionTextField.text forKey:@"version"];
    [newDevice setValue:self.companyTextField.text forKey:@"company"];
    [newDevice setValue:[NSDate date] forKey:@"date"];

NSError *error = nil;
// Save the object to persistent store
if (![context save:&error]) {
    NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}
[self.navigationController popViewControllerAnimated:YES];
 }
-(NSManagedObjectContext*)managedObjectContext{
NSManagedObjectContext*上下文=nil;
id delegate=[[UIApplication sharedApplication]delegate];
if([delegate performSelector:@selector(managedObjectContext)]){
上下文=[delegate managedObjectContext];
}
返回上下文;
}
-(无效)viewDidLoad{
[超级视图下载];
NSDate*sevenDaysBeforeDate=[NSDate DATE WITH TIME INTERVALICENSNOW:-(60.0f*60.0f*24.0f*7)];

NSPredicate*谓词=[NSPredicate谓词格式:@”(日期>=%@)和(日期你尝试过什么?你有什么实体?你可以在核心数据中存储你想要的任何日期。你认为这有什么关系吗?我有大约15个NSString的值。我想在核心数据中存储这些值。核心数据是一个对象持久性框架。这些字符串是对象的一部分,还是一个随机集合?为什么你想让它们出现在核心数据中吗?好的@Avi,我对此有点困惑,你能通过比较每日(7天的原始数据)向我建议最好的方法吗我不知道您的数据是什么样子的。请查看
NSCalendar
NSDate
NSDateComponents
的文档。在这三者之间,您可以找到需要比较日期并确定要保存哪些数据的内容。您尝试了什么?您有哪些实体?您可以在co中存储任何日期关于数据。为什么你认为这很重要?我有大约15个NSString的值。我想把它们存储在核心数据中。核心数据是一个对象持久性框架。这些字符串是对象的一部分,还是一个随机集合?为什么你想把它们放在核心数据中?好的@Avi,我对此有点困惑,你能建议m吗e最好的方法是通过比较每日(7天的备份数据)来实现这一点我不知道您的数据是什么样子的。请查看
NSCalendar
NSDate
NSDateComponents
的文档。在这三者之间,您可以找到需要比较日期并确定要保存哪些数据的内容。ThanQ。我仅通过使用核心数据尝试了这种方法,但无法删除超过一周的数据…如果你没有我的。你能给我一些关于这个问题的示例代码吗?Q。我只使用核心数据尝试了这种方法,但我无法删除一周以上的数据。如果你没有我的。你能给我一些关于这个问题的示例代码吗