CoreData Fetch (Sort by Date) - 不更新新数据?

Posted

技术标签:

【中文标题】CoreData Fetch (Sort by Date) - 不更新新数据?【英文标题】:CoreData Fetch (Sort by Date) - Doesn't update for new data? 【发布时间】:2015-06-02 17:42:37 【问题描述】:

我有一个包含 CoreData 实体的程序,其中包括一个 NSDate 字段,该字段指示每个对象的保存日期。

我想确保用户没有在 X 分钟内执行“保存”代码(测试设置为 1)。如果在 X 分钟内,则不要在上下文中添加额外的对象,只需执行其余代码...否则,保存然后执行。

这是创建新对象的代码的开头:

func makePlaces (NSObject: AnyObject) 

    let objectCount = checkCoreForObjects()

    //if objects exist in coredata
    if objectCount > 0 
        //check what the difference from latest entry is
        var latestPlace = getLatestPlace()
        println(latestPlace[0].date.timeIntervalSinceNow/60)
        if floor(latestPlace[0].date.timeIntervalSinceNow/60) >= -1 
            println("within 1 minute")
            return
         else 
            println("more than 1 minute")
        
    

    let newPlace = NSEntityDescription.insertNewObjectForEntityForName("Place",
        inManagedObjectContext: self.managedObjectContext!) as! Place

    newPlace.date = now
//lots of other working code has been removed here for clarity


self.managedObjectContext!.save(nil)

这是返回最新日期的“getLatestPlace()”方法(或者我认为......):

func getLatestPlace () -> [Place] 
    var error: NSError? = nil
    let request = NSFetchRequest(entityName: "Place")
    let sortDescriptor = NSSortDescriptor(key: "date", ascending: false)
    let sortDescriptors = [sortDescriptor]
    request.sortDescriptors = sortDescriptors
    request.fetchLimit = 1
    var latestPlace = self.managedObjectContext?.executeFetchRequest(request, error: &error) as! [Place]
    println("latestPlaces count: \(latestPlace.count)")
    println("latesttime is \(latestPlace[0].date)")
    return latestPlace

这是控制台读数:

//FIRST SAVE ATTEMPT
latestPlaces count: 1
latest date save is 2015-06-02 17:02:00 +0000
-24.5014304161072
more than 1 minute

//SECOND SAVE ATTEMPT (was within 1 min, latest date save did update)
latestPlaces count: 1
latest date save is 2015-06-02 17:26:17 +0000
-0.463125466307004
within 1 minute

//THIRD SAVE ATTEMPT (was after 1 min)
latestPlaces count: 1
latest date save is 2015-06-02 17:26:17 +0000
-1.39080496629079
more than 1 minute

//FOURTH SAVE ATTEMPT (was within 1 min, latest date save DIDNT update?!)
latestPlaces count: 1
latest date save is 2015-06-02 17:26:17 +0000
-1.47449685037136
more than 1 minute

TLDR:为什么控制台中的“第四次保存尝试”没有正确指示保存尝试是在核心数据中最近对象的 1 分钟内?它只是让我在第一分钟后保存垃圾邮件,而不会将日期更新为最新值。

我是一名新程序员,我无法弄清楚这一点。我希望这是我没有看到的愚蠢的东西!任何帮助表示赞赏。

【问题讨论】:

这看起来肯定是从尝试 #3 开始的问题。我会检查插入后newPlace 的样子,并对save 进行一些错误检查。 (它返回一个布尔值并接受一个错误参数。) 编辑了我的帖子以包含在 makePlaces() 中执行的“newPlace.date = now”。 最终弄明白了——与 CoreData 无关。我正在设置 newPlace.date = now - 仅在程序开始时将“now”变量设置为 NSDate(),这意味着每个输入的项目始终相同。愚蠢的错误!希望能以某种方式帮助别人! 【参考方案1】:

最终想通了 - 与 CoreData 无关。我正在设置 newPlace.date = now - 仅在程序开始时将“now”变量设置为 NSDate(),这意味着每个输入的项目始终相同。愚蠢的错误!希望能以某种方式帮助别人!

【讨论】:

以上是关于CoreData Fetch (Sort by Date) - 不更新新数据?的主要内容,如果未能解决你的问题,请参考以下文章

find out the neighbouring max D_value by counting sort in stack

CoreData - fetch 找不到对象

CoreData fetch 基于谓词添加属性

收到 Fetch 请求后无法更新 CoreData 模型

必须从 CoreData 调用 fetch 两次

不相关实体的CoreData Fetch Predicate