【问题标题】:iOS Core Data - Delete Objects Older Than One WeekiOS 核心数据 - 删除超过一周的对象
【发布时间】:2016-04-08 02:12:57
【问题描述】:

在我的应用程序中,当用户保存“本周最喜欢的餐厅”对象时,我首先要获取我当前保存在 Core Data 中的所有餐厅,并检查哪些餐厅早于一周。我的每个 Restaurant 对象已经拥有一个在保存对象时设置的 dateSaved 属性。

在我删除所有超过一周的Restaurant 对象后,我会将用户选择的餐厅保存到Core Data

我该如何完成这项工作?

【问题讨论】:

    标签: ios objective-c core-data


    【解决方案1】:

    像这样获取记录

    NSManagedObjectContext *moc = …;
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Restaurant"];
    
    NSError *error = nil;
    NSArray *results = [moc executeFetchRequest:request error:&error];
    if (!results) {
        DLog(@"Error fetching Restaurant objects: %@\n%@", [error localizedDescription], [error userInfo]);
        abort();
    }
    

    然后获取结果数组并像这样枚举:

    NSMutableArray *newerRestaurantsArray = [NSMutableArray alloc] init];
    for (id object in results){
    //or use a block if you want
    NSManagedObject *restaurant = (NSManagedObject *)object;
    
    if (object.dateSaved > date a week ago){
    
    [newRestaurantsArray addObject: object];
    }
    
    }
    

    newRestaurantsArray 将有您想要的。然后,您必须删除您不想要的那些或删除所有这些并保存您想要的那些。看看这个tutorial,它展示了如何保存并使其适用于您的实现。

    您也可以使用NSPredicate 仅获得您想要的结果。查看this SO 答案。看看你的具体情况如何。

    【讨论】:

    • 谢谢!我更担心是否应该将它们一个一个删除并保存上下文或删除一批。我应该在后台线程中执行此操作吗?我是 Core Data 的初学者,所以我不知道删除多个对象需要多长时间。
    • 你当然可以在后台线程中进行。不过,这比连续执​​行要复杂得多。如果你能找到一些可靠的好代码,我会继续这样做,但这样做有很多警告。
    • 现在我想了想,您可能应该看看NSPredicate 的答案。这是最有效的方法。我只是在脑海中给你一个答案,因为看起来你需要快速帮助。我不经常使用Core Data,所以这就是为什么我没有给出完整的答案:NSPredicate 和线程,因为我不太了解它。
    • 谢谢!所以我首先将一个NSDate 对象设置为一周前的日期,如下所示:NSDate *weekAgo = [today dateByAddingTimeInterval: -604800.0];。然后我将使用像[NSPredicate predicateWithFormat:@"dateSaved <= %@", weekAgo]] 这样的谓词。我想我现在明白了。
    猜你喜欢
    • 1970-01-01
    • 2012-06-17
    • 2016-10-27
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多