【问题标题】:Image within PFFile will be uploaded to parse instead of being saved into the local datastoragePFFile 中的图像将被上传到解析而不是保存到本地数据存储中
【发布时间】:2015-03-24 01:01:40
【问题描述】:

我在 Parse Framework (1.6.2) 中使用 swift。我将数据存储到本地数据存储中。数据由几个字符串和一个图像组成。此图像将存储在 PfFile 中,然后将添加到 PfObject。

现在我想知道为什么图像没有被保存,直到我注意到我需要调用 PFFile 的 save() 方法。问题是图像似乎被上传到我不想要的 Parse。我希望它存储在本地设备上..

有解决办法吗?

谢谢

编辑:

代码是这样工作的:

var spot = PFObject(className: "Spot")
let imageData = UIImageJPEGRepresentation(spotModel.getPhoto(), 0.05)
let imageFile = PFFile(name:"image.jpg", data:imageData)

spotObj.setObject(spotModel.getCategory(), forKey: "category")
spotObj.setObject(imageFile, forKey: "photo")


//if I simply would do this, the PFObject will be saved into the local datastorage, but the image won't be saved
spotObj.pin()

//if I do this, the image will be saved also BUT it won't be saved into the local data storage but will be uploaded to parse
imageFile.save()
spotObj.pin()

【问题讨论】:

  • 当您将图像保存在 PFFile 中并将其附加到 PFObject 时,它会自动上传到 Parse。您可以做的是,将图像存储在本地获取图像的路径。将路径作为字符串附加到 PFObject。保存 PFObject。完毕 !!!!当您想将其拉回时,您将拥有来自 PFObject 的路径。您还可以保存它的核心数据。本地存储取决于您的需求。 :)
  • 我不太明白。 (新的)本地数据存储实际上是为离线存储数据而设计的。我存储到本地数据存储中的所有内容都不会被上传,直到我告诉 parse 这样做(使用 saveEventually)所以我不明白为什么添加图像会有所不同?
  • 你在 PFObject 上调用 save 了吗?
  • 查看我添加的示例代码
  • @Christian 完全同意这是荒谬的。如果我无法将数据存储在本地数据存储中,那该用什么血腥yyyyyyyyyy?

标签: ios swift parse-platform pfobject pffile


【解决方案1】:

好的,看这里Save eventually on PFObject with PFFile (Parse Local Datastore)?。 可以肯定的是,如果您在 PFFile 上调用 save ,它将保存到在线数据存储区。所以你应该使用PFFile.save()。我认为对您来说最好的选择是将文件保存在某个文件夹中。在本地并将该路径保存在 PFObject 中。解析文档就这么说吧

"Pinning a PFObject is recursive, just like saving, so any objects that are pointed to by the one you are pinning will also be pinned. When an object is pinned, every time you update it by fetching or saving new data, the copy in the local datastore will be updated automatically. You don't need to worry about it at all."

它在你的主 PFObject 中的其他对象上递归调用 .pin()。但是,如果您查看PFFile API doc,它没有 .pin(),这意味着它不支持将 PFFile 保存到本地数据存储区。所以我会说你应该将它们保存在某个目录中并将路径保存在你的 PFObject 中。

更新

save:

Saves the file synchronously and sets an error if it occurs.

- (BOOL)save:(NSError **)error
Parameters
error
Pointer to an NSError that will be set if necessary.

Return Value
Returns whether the save succeeded.

【讨论】:

  • 这真是个废话。我不明白他们为什么不只是添加此功能。我的意思是在文档中没有任何地方将图像“静默”保存到服务器......
  • 解析本地数据存储真的很新。实际上,您无法使用 PFFile 在 PFObject 上调用 PFObject saveEventually()。请记住,保存将始终尝试保存在在线数据存储中。这就是他们想出一个新术语“pin”来将其保存在本地的原因。
  • 我希望在每个主要使用的对象(如 PfFile 和 PFObject)中至少有一个 pin 方法。我的意思是说:是的,只要不是二进制数据,您就可以在本地存储数据吗?
  • @Christian 我参考这个回答了另一个问题,我是由我的提问者引导到这里的,我觉得原因是因为 PFFiles 被缓存 see here 有很多原因,所以要固定到本地磁盘本地磁盘中已经缓存的文件将是多余的good read 我的建议是在需要另一个good read 时使用他们的缓存策略kPFCachePolicyCacheThenNetwork
  • 我已将应用程序的行为更改为现在将文件存储在本地,并将文件路径保存在 PFObject 中。这工作非常顺利,比使用 Parse 执行此操作要快得多
猜你喜欢
  • 2015-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-07
  • 1970-01-01
  • 2018-02-12
  • 2019-01-09
相关资源
最近更新 更多