显示pList中的特定“类别”

时间:2016-01-28 05:54:43

标签: ios swift plist

我正在创建一个简单的测验应用。我已经有一个pList文件,其中存储了我的所有问题,并为每个问题添加了“类别”键。 我的pList结构是这样的:

<plist version="1.0">
<dict>
<key>Questions</key>
<array>
    <dict>
        <key>Answers</key>
        <array>
            <string>(Answer Choice 1)</string>
            <string>(Answer Choice 2)</string>
            <string>(Answer Choice 3)</string>
            <string>(Answer Choice 4)</string>
        </array>
        <key>Category</key>
        <string>(Category Here)</string>
        <key>CorrectAnswer</key>
        <string>(Correct Answer Here)</string>
        <key>Question</key>
        <string>(Question Here)</string>
    </dict>
</array>

我可以在测验模式下成功显示pList文件的内容。

但是,我想让用户选择选择或选择他们想要测试的CATEGORY / s。考虑到这一点,我打算创建一个由CHECKBOXES组成的“设置”视图,用户可以在其中选择一个或多个他们喜欢的类别。

我的问题是,我应该使用哪些代码才能显示具有用户所选“类别”的“问题数组”? 如何将该代码连接到设置视图的复选框?

这是一个想法:

向用户显示设置视图,他们将在其中选择一个或多个类别:

The "Settings" view with category checkboxes

然后,当测验模式开始时,他们只会在他们选择的“category / s”中找到问题:

Quiz mode with selected category/s

2 个答案:

答案 0 :(得分:0)

使用以下结构创建您的plist。enter image description here

要将displaying类别作为复选框,请从plist字典中提取所有键。

NSArray *categories = [plistDictionary allKeys];

要选择某个类别下的特定问题,请将所选的复选框类别作为键从plist字典中检索特定数组。

NSarray *questions = [plistDictionary valueForKey:@"YourSelectedCategory"];

答案 1 :(得分:0)

获取如下的plist数据..

我有plist文件作为您在问题中给出的结构..

假设您选择了cat1,那么您将获得具有category =“cat1”的数据。

enter image description here

  var myDict: NSDictionary?
    if let path = NSBundle.mainBundle().pathForResource("test", ofType: "plist") {
        myDict = NSDictionary(contentsOfFile: path)
    }
    //var categoryArray = NSMutableArray()
    if let dict = myDict {
        // Use your dict here
        let questionArray =  (dict.objectForKey("Questions") as! NSArray)
        let predicate = NSPredicate(format: "(SELF.Category == %@)","cat1")
        let filterArray = (questionArray.filteredArrayUsingPredicate(predicate) as NSArray)
    //Here i am filter out data for category "cat1"
    //It will show all filter data which contain category="cat1"    
        print("\(filterArray)")

    }