我正在使用RestKit将API映射到CoreData实体。
我的问题是关于映射/保存工作的时间安排,因为我的代码未按预期工作。
当前,请求已成功完成,但是当我调用self.getUsers()
时,它仍在我的CoreData DataModel中显示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/