我在其中创建了一个带有一些单词的列表,现在我尝试从该plist中显示一个随机单词
这是我的代码
NSArray *randomAddons = [NSArray arrayWithContentsOfFile: @"wordsENG.plist"];
int randomIndex = arc4random() % [randomAddons count];
mainTextController.text = [username2 stringByAppendingString:[randomAddons objectAtIndex:randomIndex]];
这会崩溃,当我更改%[randomAddons count]时;至%3;它崩溃但我不知道如何正确编码这可以有人帮助我吗?
感谢
修改
我编辑的plist文件存在问题,根据提供的链接jackjr300,请查看下面的注释。我仍然留下从一开始就得到的崩溃。崩溃说:
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个单词
答案 0 :(得分:1)
问题是plist文件不是数组,它是一个字典:)
代码应该是(假设是,存在用于键存储的单词的数组(keyForArray):
(正确的实现取决于字典中的entires - 如何将行添加到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.
}
答案 1 :(得分:0)
您的文件似乎未正确包含在应用的主要捆绑包中。在项目导航器中,单击项目,然后选择应用程序的目标。选择“Build Phases”部分,然后查找“Copy Bundle Resources”构建阶段。如果您没有,可以使用“添加构建阶段”按钮创建一个。
一旦有了Copy Bundle Resource构建阶段,请确保您的plist文件在该部分中列为bundle资源。如果不是,您可以按+按钮添加它,或将文件从主项目导航器文件列表拖到捆绑资源列表中。
完成此操作后,您可以重建并将文件包含在捆绑包中。如果该文件在您的包中,您可以使用另一个答案中建议的[[NSBundle mainBundle] pathForResource:@"wordsENG" ofType@"plist"]
答案 2 :(得分:-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]];