Сохранить в конечном итоге на PFObject с PFFile (Parse Local Datastore)?

Цель

Я пытаюсь спасти PFObject это имеет PFFile как атрибут Я использую новый Local Datastore для iOS, поэтому я хотел бы сохранить это PFObject с saveEventually() метод.

Эта проблема

Проблема, с которой я сталкиваюсь, заключается в том, что saveEventually() метод не похоже на сохранение PFFiles, Я пытался saveEventually() мой объект без каких-либо PFFile прилагается, и это работало нормально. Как только мой PFFile был повторно присоединен, XCode бросил пару уведомлений о точке останова (ошибки?), но не завершил приложение, и кажется, что все прошло хорошо - однако проверка в браузере анализа данных подтверждает, что сохранение не прошло.

До появления функции Local Datastore я не верю, что это было бы возможно сохранить - это бросило бы "Unable to saveEventually a PFObject with a relation to a new, unsaved PFFile." ошибка. Кажется, что функция Local Datastore исправила это, как указано в документации iOS Local Datastore:

"Закрепление объекта PFO является рекурсивным, как и сохранение, поэтому любые объекты, на которые указывает объект, который вы закрепляете, также будут закреплены. Когда объект закрепляется, каждый раз, когда вы обновляете его, извлекая или сохраняя новые данные, копирование в Локальное хранилище данных будет обновлено автоматически. Вам не нужно об этом беспокоиться."

Я обновил SDK до последней версии (v1.6.2). Есть идеи?

2 ответа

Решение

PFFiles до сих пор не поддерживают saveEventually посмотреть здесь

Последнее обновление этой страницы: 2015-01-23

Вы могли бы pinInBackgroundWithBlock и в случае успеха сохраните PFFile во временную папку в вашем комплекте приложений и удалите его, когда это необходимо или не закреплено

Я только что выпустил класс, который позволяет в конечном итоге сохранить 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);
}];
Другие вопросы по тегам