10

目标

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

问题

我遇到的问题是该saveEventually()方法似乎不喜欢保存PFFiles. 我试图对saveEventually()我的对象没有任何PFFile附加,并且效果很好。重新连接myPFFile后,Xcode 抛出了几个断点通知(错误?),但没有终止应用程序,看起来一切顺利 - 但是检查 Parse Data Browser 确认保存没有通过.

在本地数据存储功能之前,我不相信这种保存是可能的——它会抛出"Unable to saveEventually a PFObject with a relation to a new, unsaved PFFile."错误。似乎本地数据存储功能已解决此问题,正如它在iOS 本地数据存储文档中所述:

“固定 PFObject 是递归的,就像保存一样,因此您要固定的对象指向的任何对象也将被固定。当一个对象被固定时,每次通过获取或保存新数据来更新它时,复制本地数据存储会自动更新,你完全不用担心。”

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

4

2 回答 2

6

PFFiles 仍然不支持saveEventually 看这里

该页面最后更新时间:2015-01-23

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

于 2015-01-25T02:33:41.313 回答
2

我刚刚发布了一个允许最终保存 PFFile 的类。

你可以在这里找到它:

/*
     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);
}];
于 2015-09-10T08:57:41.810 回答