ios - RestKit + CoreData,理解RKManagedObjectRequestOperation

标签 ios swift core-data restkit

我正在使用 RestKit 将 API 映射到 CoreData 实体。 我的问题是关于映射/保存如何工作的时间,因为我的代码没有按预期工作。

目前,请求已成功完成,但是当我调用 self.getUsers() 时,它仍然在我的 CoreData 数据模型中显示 0 个对象。

但是,当我重新运行应用程序并在文件顶部打印 self.getUsers() 时,我看到了我的用户!因此保存正在发生,就在我的 self.getUsers() 行运行之后......

我误解了 User NSManagedObject 实际被保存的时间,因为我假设我对 self.getUsers() 的调用在链中发生得太早了.

这是我的代码,可以帮助您理解:

var request: NSURLRequest = NSURLRequest(URL: NSURL(string: "MY_API_URL_HERE")!)

var operation: RKManagedObjectRequestOperation = RKManagedObjectRequestOperation(request: request, responseDescriptors: [responseDescriptor])
operation.managedObjectContext = managedObjectStore.mainQueueManagedObjectContext
operation.managedObjectCache = managedObjectStore.managedObjectCache
operation.setCompletionBlockWithSuccess({ (operation: RKObjectRequestOperation!, result: RKMappingResult!) -> Void in
    println("Success with result: \(result)")

    var user: User = (result.array() as NSArray).firstObject as User

    // Calls a func that makes an NSFetchRequest on the 'User' Entity 
    self.getUsers()


}, failure: { (operation: RKObjectRequestOperation!, error: NSError!) -> Void in
    println("Failed with error: \(error.localizedDescription)")
})

然后是 getUsers 函数:

func getUsers() {

    var fetchRequest = NSFetchRequest(entityName: "User")

    if let fetchResults = self.appDelegate.context.executeFetchRequest(fetchRequest, error: nil) as? [User] {
        println(fetchResults.count)
        if (fetchResults.count > 0) {
            for managedObject:User in fetchResults {
                println("Found user")
                println(managedObject.valueForKey("id"))
            }
        }
    }
}

最佳答案

Restkit 维护自己的托管对象上下文(层次结构),因此您需要确保使用适当的上下文。托管对象存储(您通常只有一个,可能被多个对象管理器使用)提供了一个 mainQueueManagedObjectContext,因此可以使用以下方式访问它:

[[RKManagedObjectStore defaultStore] mainQueueManagedObjectContext]

关于ios - RestKit + CoreData,理解RKManagedObjectRequestOperation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29285480/

相关文章:

ios - 应用程序在 iPhone 5 上运行就像在 iPhone 4 上一样

Swift COW 线程安全

ios - UITableView 未显示正确的行数

ios - 使用 chrome cast 我可以直接从我的 iPhone 流式传输吗?

ios - Xcode 6 - 无法构建模块 'Accelerate'

ios - fb 登录按钮未在 View 中正确显示

ios - 如何在 Swift 中随机转至 ViewControllers?

ios - 使用 where 子句从 coredata 中删除记录

ios - 从 CoreData 中解包 Date() 类型的选项?

core-data - RestKit - 离线存储后发送添加/编辑/删除的对象