【问题标题】:How do I clear out core data after a specified period?如何在指定时间后清除核心数据?
【发布时间】:2014-07-20 18:20:10
【问题描述】:

我知道如何清除核心数据,但我想做的是让它在 60 分钟后自动清除。

这是一个购物车。我想在购物车被清除之前给客户足够的时间来下订单。购买成功后自动清零。现在我需要使用相同的代码来清除核心数据并让它在 60 分钟后运行,无论如何。

我该怎么做?请给我一个例子。

我知道 perform selector after duration 方法,我可以在我用来将商品添加到购物车的方法中调用它。我只会在购物车的总项目数等于 1 时才调用它,所以它只被调用一次。

也许他们是一个更好的方法来做到这一点。想看看你的信息。

感谢您的宝贵时间。

【问题讨论】:

    标签: objective-c cocoa-touch core-data uiviewcontroller nstimer


    【解决方案1】:

    您可以添加可以清除核心数据的计时器。见下面代码

     NSTimer * clearTimer = [NSTimer scheduledTimerWithTimeInterval:60*60 target:self selector:@selector(clearCoreData) userInfo:nil repeats:YES];
    

    如果您必须使用计时器,则制作局部变量,否则您可以编写:

    [NSTimer scheduledTimerWithTimeInterval:60*60 target:self selector:@selector(clearCoreData) userInfo:nil repeats:YES];
    

    并创建清除核心数据的方法。

    -(void) clearCoreData {
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:_managedObjectContext];
    [fetchRequest setEntity:entity];
    
    NSError *error = nil;
    NSArray *items = _managedObjectContext executeFetchRequest:fetchRequest error:&error];
    
       for (NSManagedObject *managedObject in items) {
         [_.managedObjectContext deleteObject:managedObject];
       }
       [_.managedObjectContext save:&error];
    }
    

    您还可以清除整个核心数据:

    -(void)resetCoreData {
    NSPersistentStore *store = ...;// core data NSPersistentStore object
    NSError *error;
    NSURL *storeURL = store.URL;
    NSPersistentStoreCoordinator *storeCoordinator = ...;// core data NSPersistentStoreCoordinator object            
    [storeCoordinator removePersistentStore:store error:&error];
    [[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error];
    }
    

    【讨论】:

    • ... 带有标准警告:非常小心在将对象从中删除的同时,在使用对象的不同线程上可能存在上下文持久存储。例外就是这样。
    • 如何处理未使用的 clearTimer 本地变量?我可以直接调用 [NSTimer scheduledTimerWithTimeInterval:60*60 target:self selector:@selector(clearCoreData) userInfo:nil repeats:YES];在将商品添加到购物车的方法中?
    • 假设我在包中添加了另一个项目并且计时器代码再次运行。计时器是重新启动还是创建了另一个?
    • @LondonGuy 计时器已安排。如果局部变量仅用于使用该计时器。例如如果你需要做的无效。否则你可以只写 [NSTimer scheduledTimerWithTimeInterval:60*60 target:self selector:@selector(clearCoreData) userInfo:nil repeats:YES];
    • @LondonGuy 它不会创建另一个。它会在间隔后重新启动。
    猜你喜欢
    • 2011-07-28
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2019-04-05
    相关资源
    最近更新 更多