从plist导入的nsdictionary生成随机句子

时间:2012-10-24 13:31:25

标签: objective-c ios xcode plist nsdictionary

我创建了这个plist作为字典,以保持书名为键:

<dict>
    <key>Frankestein</key>
        <dict>
        <key>0</key>
        <string>his name was frank</string>
        <key>1</key>
        <string>he was a monster</string>
    </dict>
    <key>dracula</key>
    <dict>
        <key>0</key>
        <string>his name was dracula</string>
        <key>1</key>
        <string>he was a vampire</string>
    </dict>
</dict>
</plist>

然后将plist加载到字典中:

NSDictionary *plisttext2 = [NSDictionary dictionaryWithContentsOfFile:@"text2.plist"];

我如何能够从字典中生成和显示随机句子,并显示句子编号和书名(键)?

感谢您的帮助!!

2 个答案:

答案 0 :(得分:1)

首先,NSDictionary *plisttext2 = [NSDictionary dictionaryWithContentsOfFile:@"text2.plist"];将不起作用。 ContentsOfFile参数需要完整路径,而不是相对路径文件名。为此,请使用:

NSBundle* bundle = [NSBundle mainBundle];
NSString* plistPath = [bundle pathForResource:@"text2" ofType:@"plist"];
NSDictionary* plisttext2 = [NSDictionary dictionaryWithContentsOfFile:plistPath];

现在要生成并显示随机句子,您需要跟踪所有键:

NSArray* keys = [plisttext2 allKeys]

然后使用索引选择随机密钥:

int randomIndex = arc4random() % (keys.count);
NSString* key = [plisttext2 objectForKey:[keys objectAtIndex:randomIndex]];

使用随机选择的键,您可以访问本书的句子,并使用相同的方法随机选择它们。选择之后,将它们全部加在一起,就可以得到结果。

这意味着您可以从不同的书籍中生成随机句子,同时仍然可以显示句子编号+书名(因为您一直保留他们的索引来引用它们)。

答案 1 :(得分:0)

您可以遍历plist以确定每个字典的最大键值,然后执行类似于下面的代码的操作,从每个字典中随机选择一个句子。

int min = 0; 
int max = iterationResult;
int randNum = rand() % (max-min) + max; //create the random number.
NSLog(@"RANDOM NUMBER: %i", randNum);