ios - how to use dict inside a plist -


i have plist file like

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

and load code bellow

let path = nsbundle.mainbundle().pathforresource("test", oftype: "plist") database = nsdictionary(contentsoffile: path!) let array = nsmutablearray() member in (database.allkeys) {     let level = member.valueforkey("level") as! int     if () {         //do     }  } 

when app runs, crash. reason think member in database can't cast nsdictionary since it's nstaggedpointerstring, don't know how make work.

update:

the previous question, have addressed answer @wonzigii, , got right dict using method defined validatecard(), @wonzigii said bellow.

func validatecard() -> nsarray? 

now want randomly retrieve item inside new array use something, i'm solving issue using random index, seem can't array item index, since if did so, can't use next layer dict. should next?

if let avaliablecarddeck = self.validatecard() {      _ 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)      }   } 

the reason allkeys return array contains type anyobject. yet member, in case, anyobject type.

for member in (database!.allkeys) member as? string == "horse" {     let integer = database?.valueforkeypath("horse.level") as! int     print(integer) } 

note allkeys return top level keys.

edit:

the below code use member key loop through dictionary retrieve deeper value.

for member in (database!.allkeys) {     if let dic = database?.valueforkey(member as! string) {         // level value or else         let integer = dic.valueforkey("level") as! int          print(integer)     }    } 

more swiftly way(without forced unwrapping, aka, !):

if let path = nsbundle.mainbundle().pathforresource("test", oftype: "plist"), db = nsdictionary(contentsoffile: path) as? [string: anyobject] {     member in db.keys {         if let dic = db[member] {             // level value or else             let integer = dic.valueforkey("level") as! int             print(integer)         }     }  } 

Comments

Popular posts from this blog

jOOQ update returning clause with Oracle -

java - Warning equals/hashCode on @Data annotation lombok with inheritance -

java - BasicPathUsageException: Cannot join to attribute of basic type -