Search code examples
iosxcodensarrayplistnsdictionary

Retrieve data from plist


I have a plist and inside that an array and then set of dictionary elements? How can I retrieve data from the plist to my array?

plist

How can I get category names in one array?


Solution

  • Objective-C

    // Read plist from bundle and get Root Dictionary out of it
    NSDictionary *dictRoot = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"]];
    
    // Your dictionary contains an array of dictionary
    // Now pull an Array out of it.
    NSArray *arrayList = [NSArray arrayWithArray:[dictRoot objectForKey:@"catlist"]];
    
    // Now a loop through Array to fetch single Item from catList which is Dictionary
    [arrayList enumerateObjectsUsingBlock:^(id obj, NSUInteger index, BOOL *stop) {
        // Fetch Single Item
        // Here obj will return a dictionary
        NSLog(@"Category name : %@",[obj valueForKey:@"category_name"]);
        NSLog(@"Category id   : %@",[obj valueForKey:@"cid"]);
    }];
    

    Swift

    // Read plist from bundle and get Root Dictionary out of it
    var dictRoot: [NSObject : AnyObject] = [NSObject : AnyObject].dictionaryWithContentsOfFile(NSBundle.mainBundle().pathForResource("data", ofType: "plist"))
    // Your dictionary contains an array of dictionary
    // Now pull an Array out of it.
    var arrayList: [AnyObject] = [AnyObject].arrayWithArray((dictRoot["catlist"] as! String))
    // Now a loop through Array to fetch single Item from catList which is Dictionary
    arrayList.enumerateObjectsUsingBlock({(obj: AnyObject, index: UInt, stop: Bool) -> Void in
        // Fetch Single Item
        // Here obj will return a dictionary
        NSLog("Category name : %@", obj["category_name"])
        NSLog("Category id   : %@", obj["cid"])
    })
    

    Swift 2.0 Code

    var myDict: NSDictionary?
        if let path = NSBundle.mainBundle().pathForResource("data", ofType: "plist") {
            myDict = NSDictionary(contentsOfFile: path)
        }
        let arrayList:Array = myDict?.valueForKey("catlist") as! Array<NSDictionary>
        print(arrayList)
    
        // Enumerating through the list
        for item in arrayList  {
            print(item)
    
        }
    

    Swift 3.0

    // Read plist from bundle and get Root Dictionary out of it
    var dictRoot: NSDictionary?
    if let path = Bundle.main.path(forResource: "data", ofType: "plist") {
        dictRoot = NSDictionary(contentsOfFile: path)
    }
    
    if let dict = dictRoot
    {
        // Your dictionary contains an array of dictionary
        // Now pull an Array out of it.
        var arrayList:[NSDictionary] = dictRoot?["catlist"] as! Array
        // Now a loop through Array to fetch single Item from catList which is Dictionary
        arrayList.forEach({ (dict) in
            print("Category Name \(dict["category_name"]!)")
            print("Category Id \(dict["cid"])")
        })
    }