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

ファイルがアプリのメイン バンドルに正しく含まれていないようです。プロジェクト ナビゲーターでプロジェクトをクリックし、アプリケーションのターゲットを選択します。[ビルド フェーズ] セクションを選択し、[バンドル リソースのコピー] ビルド フェーズを探します。持っていない場合は、[ビルド フェーズの追加] ボタンを使用して作成できます。

バンドル リソースのコピー ビルド フェーズが完了したら、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 に答える