撤消/恢复对 PFObject 的本地更改
Posted
技术标签:
【中文标题】撤消/恢复对 PFObject 的本地更改【英文标题】:Undo/revert local changes to PFObject 【发布时间】:2014-10-26 19:02:45 【问题描述】:假设我有一个正在编辑的 PFObject。在稍后阶段,我希望取消对 PFObject 所做的更改。如何恢复到 PFObject 的原始副本?
我尝试过的
if (self.request.isDirty) // self.request is a PFObject
// Reload object
NSLog(@"%@", self.request.requestTitle); // Logs ABC, Original was DEF
[self.request refreshInBackgroundWithBlock:^(PFObject *object, NSError *error)
if (!error)
NSLog(@"%@", self.request.requestTitle); // Logs ABC
[self.requestDetailsTableView reloadData];
];
我也尝试获取对象,但结果相同
if (self.request.isDirty) // self.request is a PFObject
// Reload object
NSLog(@"%@", self.request.requestTitle); // Logs ABC, Original was DEF
[self.request fetchInBackgroundWithBlock:^(PFObject *object, NSError *error)
if (!error)
NSLog(@"%@", self.request.requestTitle); // Logs ABC
[self.requestDetailsTableView reloadData];
];
【问题讨论】:
你有没有保存过PFObject? 不。我没有。已检查数据库以确保。我相信如果数据可用,它会从缓存中获取它(我认为 fetchIfNeeded likes 应该是这种情况) 也许首先尝试使用clearCachedResult
清除该PFObject的PFQuery缓存结果:parse.com/docs/ios/api/Classes/PFQuery.html#//api/name/…
您在获取之前尝试过self.request = [PFObject objectWithoutDataWithObjectId:self.request.objectId]
之类的方法吗?也许这会有所帮助。
【参考方案1】:
PFObject
现在有一个 revert 方法,只要您没有调用 save,它就会将您的对象重置回服务器状态:http://parseplatform.org/Parse-SDK-iOS-OSX/api/Classes/PFObject.html#/c:objc(cs)PFObject(im)revert
例如,我使用带有表单的推送视图控制器来编辑我的 PFObject 子类的属性,并且我有两个按钮用于取消和保存...
@IBAction override func cancelAction()
self.myObject?.revert()
self.navigationController?.popViewControllerAnimated(true)
@IBAction override func saveAction()
self.myObject?.saveInBackgroundWithBlock( (succeeded: Bool, error: NSError?) -> Void in
if (succeeded)
self.navigationController?.popViewControllerAnimated(true)
else
// Show error
)
【讨论】:
【参考方案2】:目前没有办法直接做到这一点 - 你需要在你的呼叫中做一些花哨的步法:)
试试这个:
if (self.request.isDirty) // self.request is a PFObject
// Reload object
NSLog(@"%@", self.request.requestTitle); // Logs ABC, Original was DEF
PFQuery *newRequest = [PFQuery queryWithClassName:@"YourClassName"];
//Add your request parameters here...
[newRequest getFirstObjectInBackgroundWithBlock:^(PFObject *object, NSError *error)
if (!error)
self.request = object;
NSLog(@"%@", self.request.requestTitle); // Should log DEF
[self.requestDetailsTableView reloadData];
];
【讨论】:
我确实以奇特的方式做事。但是想发布这个问题,希望一些 Parse 开发人员会绊倒它并做一些事情。谢谢:)以上是关于撤消/恢复对 PFObject 的本地更改的主要内容,如果未能解决你的问题,请参考以下文章
在 TFS 2013 中启动回滚后,我可以恢复我最近的本地更改吗?