首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最终拯救PFFile

最终拯救PFFile
EN

Stack Overflow用户
提问于 2015-09-10 09:07:33
回答 1查看 109关注 0票数 0

当网络可访问时,PFObject可以是saveEventually,以便在解析中同步,同时保持其本地同步。

如果您的文件包含PFFile,则在保存PFObject之前,该文件必须是savedInBackground。

如何saveEventually一个PFFile,以便它现在发送,或以后当网络是可达的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-10 09:07:33

正如您可能知道的那样,这个特性在ParseSDK中是不可用的,所以在看到几篇文章含糊地解释了如何绕过这个特性之后,我编写了一个XCode项目示例

这只是一个正常工作的PoC,有一些限制,比如只为一个与保存的PFFile相关联的Parse类工作。

它需要可达舱' Reachability ','~> 3.2‘

怎么用呢?好吧,我猜示例项目很好地描述了它,但是下面是一段代码来理解它是如何工作的:

(请记住在运行示例之前运行pod以解决依赖关系)

代码语言:javascript
复制
/*
 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);
}];

这可能会有很大的改进,但我想你们可能会发现这很有用,因为我想找一个类似的例子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32497574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档