【问题标题】:Parse array seems to store locally to my app session解析数组似乎本地存储到我的应用程序会话
【发布时间】:2015-07-20 20:05:14
【问题描述】:

我的应用程序中有一个以前从未见过的奇怪错误。基本上我有两个视图 - 用户配置文件和编辑配置文件。在 User Profile 视图中,我从 Parse 中检索到两件事:

  1. 表示用户头像顺序的字符串数组(例如 ["pic1", "pic3", "pic2"])
  2. 照片文件本身(最多 6 个)

在编辑个人资料视图中,用户可以上传新照片以及重新排列订单数组。该视图还有一个用于关闭视图并放弃任何更改的按钮,如下所示:

@IBAction func cancelTapped(sender: AnyObject) {

    self.dismissViewControllerAnimated(true, completion: nil)

}

问题是,如果我对照片顺序数组进行任何更改,例如重新排列或附加到它,然后点击“取消”按钮,视图就会按原样关闭。但是,当我返回编辑配置文件视图时,或者即使我关闭用户配置文件然后重新打开它,两个视图都显示不应该保存的新订单数组,因为我点击了“取消”按钮。我可以解决的唯一方法是关闭应用程序并重新打开。

数组是否被本地保存到 iPhone?如果您需要更多信息或查看更多代码,请告诉我!

编辑:忘了提一下,当我查看 Parse 时,值并没有存储在那里,但是 Xcode 日志说重新加载视图时数组发生了变化。

编辑 2:这里是 self.photoOrder 的实例化:

var photoOrder:NSMutableArray = []

来自 Constants.swift 的 currentuser 实例化

var currentuser = PFUser.currentUser()

【问题讨论】:

  • 您如何加载/保存现有的照片订单数组?您是将值从主视图传递到编辑配置文件视图还是视图本身加载值?
  • 编辑配置文件视图将它们本身作为 viewDidLoad 的一部分加载。看起来像这样: self.photoOrder = currentuser.objectForKey("photoOrder") as! NSMutableArray
  • 您能从编辑配置文件视图控制器中添加更多代码吗? self.photoOrder 的声明和currentuser 对象的实例化对于解决您的问题很有趣。
  • 好的,很好。我将它添加到帖子的底部。但是,当前用户声明发生在 Edit Profile 视图之外,并且在应用程序的其他部分工作正常。我还应该包括吗?
  • 当您包含访问currentuser 对象的代码时,我们可以解决您的问题。如果您在声明编辑配置文件视图时传递对全局 currentuser 对象的引用,那应该可以解决我的问题。

标签: ios arrays swift parse-platform


【解决方案1】:

我不知道您的重新排序方法是什么样的,以及在重新排序完成后您是否在 PFUser 对象上调用了 save 方法。您似乎以某种方式覆盖了编辑配置文件视图中的 photoOrder 属性。

解决方案 1

一个简单的解决方案是在加载视图时备份当前值:

var photoOrderBackup:NSMutableArray = []

// viewDidLoad
self.photoOrder = currentuser.objectForKey("photoOrder") as! NSMutableArray
self.photoOrderBackup = currentuser.objectForKey("photoOrder") as! NSMutableArray

然后您就有机会在用户取消操作时应用备份值。

@IBAction func cancelTapped(sender: AnyObject) {
    currentUser.photoOrder = self.photoOrderBackup; // Apply backup value
    // Perhaps add the save method here after you've overwritten the photoOrder value
    self.dismissViewControllerAnimated(true, completion: nil)
}

解决方案 2

如果更改尚未保存到 currentuser 对象,刷新对象可能有助于消除未决更改。

@IBAction func cancelTapped(sender: AnyObject) {
    currentUser.refresh() // Refresh object with local data
    self.dismissViewControllerAnimated(true, completion: nil)
}

【讨论】:

  • 感谢您的帮助!我还在视图上添加了 currentuser.refresh() 。不知何故,这从代码中溜走了,我认为是罪魁祸首……为了安全起见,现在使用这两种解决方案。
猜你喜欢
  • 2016-02-04
  • 2015-07-12
  • 1970-01-01
  • 2017-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多