里面我有一个像如何使用字典一个的plist
<dict>
<key>horse</key>
<dict>
<key>level</key>
<integer>2</integer>
</dict>
</dict>
plist文件中,并通过我的代码加载波纹管
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
}
}
,当应用程序运行时,它会崩溃。我认为的原因是dataBase中的成员不能转换为NSDictionary,因为它是NSTaggedPointerString,我不知道如何使它工作。
更新:
前一个问题,我已经解决了由@Wonzigii答案,现在我用这个方法我定义validateCard()右字典,这是@Wonzigii所述波纹管。
func validateCard() -> NSArray?
现在我想随意检索新的阵列内的项目用它来做些什么,什么我解决这个问题是使用随机指数,但似乎被我不能得到的数组项索引,因为如果我这样做了,我不能用它来获得下一层字典。接下来我应该做什么?
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来获得数组,并且我可以为数组中的每个项目调用valueForKeyPath。 – Ryan
因为allKeys我得到一个NSTaggedPointerString的数组,NSString的子类,它不能响应字典的方法,并导致崩溃,我可以有更好的方法将它转换回NSDictionary? – Ryan
@瑞恩当然可以。看我的编辑。 –