作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
class PLCalendarEventViewController: UITableViewController {
var event: NSMutableDictionary!
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == PLCalendarEditEventLinksSegueIdentifier {
let tvc = segue.destinationViewController as PLCalendarEditEventLinksTableViewController
if var links = event.objectForKey("links") as? NSMutableArray {
tvc.data = links
}
}
}
}
但在我的 PLCalendarEditEventLinksTableViewController
中,当我尝试 data.addObject("new link")
时,出现以下错误:
发送到不可变对象(immutable对象)的变异方法
。
我需要做的就是当我在 PLCalendarEditEventLinksTableViewController
中更改我的 NSMutableArray
我在 PLCalendarEventViewController
中更改 event: NSMutableDictionary
>
class PLCalendarEditEventLinksTableViewController: UITableViewController {
var data = NSMutableArray()
}
在 Objective-C 中很简单,但是在 Swift 中如何做到呢?
最佳答案
这个问题可以用这个简单的脚本重现:
import Foundation
let userDefault = NSUserDefaults.standardUserDefaults()
let obj: NSMutableDictionary = ["test": NSMutableArray(array: ["foo", "bar"])]
userDefault.setObject(obj, forKey: "key")
let obj2 = userDefault.objectForKey("key") as NSMutableDictionary
if let ary = obj2["test"] as? NSMutableArray {
ary.addObject("baz")
}
您可以将 NSMutableArray
存储到 NSUserDefaults
,但是当从中检索它时,它实际上是一个不可变数组。见the docs :
Values returned from
NSUserDefaults
are immutable, even if you set a mutable object as the value.
我不知道 event
是如何构造的,但无论如何,您必须将它深复制到可变容器中。据我所知,最简单的方法是使用 CFPropertyListCreateDeepCopy()
。在构建 event
属性的地方:
event = CFPropertyListCreateDeepCopy(nil, event, CFPropertyListMutabilityOptions.MutableContainers.rawValue) as NSMutableDictionary
关于ios - 如何在 Swift 中将 NSMutableArray 作为对 NSMutableDictionary 部分的引用传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28191486/
我是一名优秀的程序员,十分优秀!