当网络可访问时,PFObject可以是saveEventually,以便在解析中同步,同时保持其本地同步。
如果您的文件包含PFFile,则在保存PFObject之前,该文件必须是savedInBackground。
如何saveEventually一个PFFile,以便它现在发送,或以后当网络是可达的?
发布于 2015-09-10 09:07:33
正如您可能知道的那样,这个特性在ParseSDK中是不可用的,所以在看到几篇文章含糊地解释了如何绕过这个特性之后,我编写了一个XCode项目示例
这只是一个正常工作的PoC,有一些限制,比如只为一个与保存的PFFile相关联的Parse类工作。
它需要可达舱' Reachability ','~> 3.2‘
怎么用呢?好吧,我猜示例项目很好地描述了它,但是下面是一段代码来理解它是如何工作的:
(请记住在运行示例之前运行pod以解决依赖关系)
/*
This example uses an UIImage, but this works with any file writable as NSData
We begin by writing this image in our tmp directory with an uuid as name.
*/
UIImage *nyancat = [UIImage imageNamed:@"nyancat.jpg"];
NSData *imageData = UIImageJPEGRepresentation(nyancat, 0.5);
NSString *filename = [[NSUUID UUID] UUIDString];
NSURL *fileUrl = [PFFileEventuallySaver fileURLInTmpWithName:filename];
[imageData writeToURL:fileUrl atomically:YES];
/*
We create a PFObject (you can pass an array to below function if you need your file to be saved on several objects). If upload works on first time, do what you want with your file, like linking it on your PFobject.
If saving fails, it'll be retried as soon as network is available, on this session or nexts launches of app.
In that case, the pointer at key kPFFILE_MANAGER_OBJECT_FILE_KEY of your PFFObject will be set with the PFFile, then saved eventually within PFFileEventuallySaver
*/
PFObject *object = [PFObject objectWithClassName:kPFFILE_CONTAINER_OBJECT_CLASSNAME];
[[PFFileEventuallySaver getInstance] trySaveobjectAtURL:fileUrl associatedObjects:@[object] withBlock:^(PFFile *file, NSError *error) {
if(!error)
{
NSLog(@"[First try, network is fine] File saved, saving PFObject");
object[kPFFILE_MANAGER_OBJECT_FILE_KEY] = file;
[object saveEventually];
NSLog(@"Try again disabling your network connection");
}
else
{
NSLog(@"No network, connect back your wifi, or relaunch app. Your file will be sent");
}
} progressBlock:^(int percentDone) {
NSLog(@"[First try, network is fine] Sending file %d/100%%", percentDone);
}];这可能会有很大的改进,但我想你们可能会发现这很有用,因为我想找一个类似的例子。
https://stackoverflow.com/questions/32497574
复制相似问题