ios - docs - Guardar eventualmente en PFObject con PFFile(Parse Local Datastore)?
docs parse platform (2)
Acabo de lanzar una clase que permite guardar finalmente un PFFile.
Puedes encontrarlo aquí :
/*
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);
}];
Gol
Estoy tratando de guardar un PFObject
que tiene un PFFile
como atributo. Estoy usando el nuevo Local Datastore para iOS, así que me gustaría guardar este PFObject
con el método saveEventually()
.
El problema
El problema que encuentro es que al método saveEventually()
no parece gustarle guardar los PFFiles
. Traté de saveEventually()
mi objeto sin ningún PFFile
conectado, y funcionó bien. Tan pronto como se PFFile
conectar mi PFFile
, Xcode lanzó un par de avisos de punto de interrupción (¿errores?) Pero no finalizó la aplicación, y parece que todo salió bien. Sin embargo, una comprobación en el navegador de datos Parse confirma que no se guardó mediante.
Antes de la función Almacén de datos local, no creo que esta "Unable to saveEventually a PFObject with a relation to a new, unsaved PFFile."
salvar hubiese sido posible; habría arrojado el "Unable to saveEventually a PFObject with a relation to a new, unsaved PFFile."
se ha podido salvar, "Unable to saveEventually a PFObject with a relation to a new, unsaved PFFile."
error. Parece que la característica Local Datastore ha solucionado esto, como lo indica en los documentos del Datastore local de iOS :
"Fijar un PFObject es recursivo, al igual que guardar, por lo que cualquier objeto apuntado por el que está fijando también se fijará. Cuando se fija un objeto, cada vez que lo actualice buscando o guardando datos nuevos, la copia de el almacén de datos local se actualizará automáticamente. No tiene que preocuparse por nada en absoluto ".
He actualizado el SDK a la última versión (v1.6.2). ¿Algunas ideas?
Los archivos PFF aún no son compatibles con saveEventually
see here
Esa página fue actualizada por última vez: 2015-01-23
Podría pinInBackgroundWithBlock
y si lo logra, guarde el PFFile en una carpeta temporal en su paquete de aplicaciones y elimínelo cuando sea necesario o sin fijar.