gpt4 book ai didi

ios - 如何在plist中使用dict

转载 作者:可可西里 更新时间:2023-11-01 02:15:50 26 4
gpt4 key购买 nike

我有一个像这样的 plist 文件

<dict>
<key>horse</key>
<dict>
<key>level</key>
<integer>2</integer>
</dict>
</dict>

然后我通过下面的代码加载它

let path = NSBundle.mainBundle().pathForResource("test", ofType: "plist")
dataBase = NSDictionary(contentsOfFile: path!)
let array = NSMutableArray()
for member in (dataBase.allKeys) {
let level = member.valueForKey("level") as! Int
if () {
//do something
}
}

当应用程序运行时,它会崩溃。我认为原因是数据库中的成员不能转换为 NSDictionary,因为它是 NSTaggedPointerString,我不知道如何让它工作。

更新:

上一个问题,我已经解决了@Wonzigii 的答案,现在我使用我定义了 validateCard() 的方法得到了正确的字典,这是@Wonzigii 在下面说的。

func validateCard() -> NSArray?

现在我想在新数组中随机检索它的项目以使用它来做某事,我正在解决这个问题的是使用随机索引,但似乎我无法通过索引获取数组项目,因为如果我这样做了,我不能用它来获取下一层dict。接下来我该做什么?

if let avaliableCardDeck = self.validateCard() {
for _ in 0...16 {
let maxAvaliableCards = avaliableCardDeck.count
let index = Int(arc4random()) % maxAvaliableCards
let cardInfo = avaliableCardDeck[index]
let newCard = PlayCard()
newCard.rank = cardInfo.valueForKey("number") as! Int
newCard.imageName = cardInfo.valueForKey("imageSource") as? String
addCard(newCard)
}
}

最佳答案

原因是 allKeys 将返回一个包含类型 AnyObject 的数组。所以 member 在本例中是 AnyObject 类型。

for member in (dataBase!.allKeys) where member as? String == "horse" {
let integer = dataBase?.valueForKeyPath("horse.level") as! Int
print(integer)
}

请注意,allKeys 始终返回顶级 keys

编辑:

下面的代码将使用 member 作为键来循环遍历字典以检索更深的值。

for member in (dataBase!.allKeys) {
if let dic = dataBase?.valueForKey(member as! String) {
// get the level value or something else
let integer = dic.valueForKey("level") as! Int
print(integer)
}
}

更快速的方式(无需强制解包,又名 !):

if let path = NSBundle.mainBundle().pathForResource("test", ofType: "plist"), db = NSDictionary(contentsOfFile: path) as? [String: AnyObject] {
for member in db.keys {
if let dic = db[member] {
// get the level value or something else
let integer = dic.valueForKey("level") as! Int
print(integer)
}
}
}

关于ios - 如何在plist中使用dict,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38579588/

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