用PFFile(parsing本地数据存储)最终保存在PFObject上?

目标

我正在尝试保存一个PFFile作为属性的PFFile 。 我正在使用iOS的新本地数据存储 ,所以我想用saveEventually()方法保存这个PFObject

问题

我遇到的问题是saveEventually()方法似乎不喜欢保存PFFiles 。 我试图saveEventually()我的对象没有附加任何PFFile ,并且工作正常。 只要我的PFFile被重新附加,Xcode扔了几个断点通知(错误?),但没有终止该应用程序,似乎一切顺利 – 但检查数据浏览器确认保存没有去通过。

在本地数据存储function之前,我不相信这个保存是可能的 – 它会抛出"Unable to saveEventually a PFObject with a relation to a new, unsaved PFFile." 错误。 好像本地数据存储function已经解决了这个问题,就像它在iOS本地数据存储文档中说明的那样 :

“固定一个PFObject是recursion的,就像保存一样,所以被固定的那个对象所指向的任何对象也将被固定。当一个对象被固定时,每当你通过获取或保存新数据来更新它,本地数据存储会自动更新,根本不需要担心。“

我已经将SDK更新到最新版本(v1.6.2)。 有任何想法吗?

PFFiles仍然不支持saveEventually 在这里看到

该页面最近一次更新时间:2015-01-23

您可以pinInBackgroundWithBlock ,如果成功,将PFFile保存到您的应用程序包中的临时文件夹中,并在必要时删除它或取消固定

我刚刚发布了一个课程,可以保存最终的PFFile。

你可以在这里find它:

 /* 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); }];