0

我制作了一个包含一些单词的 ap 列表,现在我尝试从该 plist 中显示一个随机单词

这是我的代码

NSArray *randomAddons = [NSArray arrayWithContentsOfFile: @"wordsENG.plist"];
int randomIndex = arc4random() % [randomAddons count];
mainTextController.text = [username2 stringByAppendingString:[randomAddons objectAtIndex:randomIndex]];

这会崩溃,当我更改 % [randomAddons count]; 至 % 3; 它崩溃了,但我不知道如何正确编码,有人可以帮我吗?

谢谢

编辑:

根据提供的链接jackjr300,我编辑的plist文件有问题,看下面的评论。我仍然面临着从一开始就遇到的崩溃。崩溃说:

Array: (
        (
        SAMSAM,
        SELSEL,
        DONDON
    )
)
2012-07-10 03:41:11.048 spinningyarn[1590:1bb03] -[__NSCFArray length]: unrecognized selector sent to instance 0xcfcfdd0
2012-07-10 03:41:11.048 spinningyarn[1590:1bb03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray length]: unrecognized selector sent to instance 0xcfcfdd0'
*** First throw call stack:
(0x1b04022 0x1ee0cd6 0x1b05cbd 0x1a6aed0 0x1a6acb2 0x1468bd9 0x115dc3 0x3de995 0x979ed9 0x981725 0x8ea4ab 0x9837c6 0x8c9885 0x2166330 0x2168509 0x1a3b803 0x1a3ad84 0x1a3ac9b 0x26287d8 0x262888a 0xb3d626 0x29e2 0x2955 0x1)
terminate called throwing an exception(lldb) 

SAMSAM、SELSEL、DONDON 是我的 P 列表文件中的 3 个单词

4

3 回答 3

1

问题是 plist 文件不是一个数组,它是一个字典 :)
代码应该是(假设是,有一个数组,其中存储了关键字(keyForArray)的单词:(
正确的实现取决于字典中的整体 - 如何将行添加到 plist 文件)

NSDictionary *randomEntriesDictionary = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"wordsENG" ofType:@"plist"]];

NSUInteger dictionaryCount = [randomEntriesDictionary count];
if(nil != dictionaryCount)
{
   NSArray *randomWords = [randomEntriesDictionary objectForKey:keyForArray];
   NSUInteger randomIndex = arc4Random % dictionaryCount;
   NSString *randomWord = [randomWords objectAtIndex:randomIndex];
}
else
{
  // check if file exists  and not empty?
  // is it in plist format ?
  ... do the needed.
}
于 2012-07-10T00:31:53.317 回答
0

您的文件似乎未正确包含在您的应用程序的主包中。在项目导航器中,单击项目,然后为您的应用程序选择目标。选择“构建阶段”部分,然后查找“复制捆绑资源”构建阶段。如果您没有,您可以使用“添加构建阶段”按钮创建一个。

完成 Copy Bundle Resource 构建阶段后,请确保您的 plist 文件在该部分中列为捆绑资源。如果不是,您可以按 + 按钮添加它,或者将文件从主项目导航器文件列表拖到捆绑资源列表中。

完成此操作后,您可以重建并且该文件应包含在您的捆绑包中。如果文件在您的捆绑包中,则可以使用[[NSBundle mainBundle] pathForResource:@"wordsENG" ofType@"plist"]另一个答案中建议的内容

于 2012-07-10T01:24:10.597 回答
-1

如数组中的控制台数组所示。所以试试这个希望它对你有帮助......

NSArray *randomAddons = [NSArray arrayWithContentsOfFile: @"wordsENG.plist"];

NSArray *randomArray = [[NSArray alloc] initWithObjects:[ randomAddons objectAtIndex:0], nil];

int randomIndex = arc4random() % [randomArray count];
mainTextController.text = [username2 stringByAppendingString:[randomArray objectAtIndex:randomIndex]];
于 2012-07-10T05:18:26.180 回答