gpt4 book ai didi

ios - 如何在 Swift 中将 NSMutableArray 作为对 NSMutableDictionary 部分的引用传递?

转载 作者:行者123 更新时间:2023-11-28 07:11:46 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com