何が間違っているかを示している可能性があるため、デバッガコンソールを確認してください。
[file.list objectAtIndex:index]
NSRangeExceptionが発生する場合index
は、配列の境界外にあるインデックスが含まれていることが原因である可能性があります。Cocoaの配列はシリアルであり、連想的ではないことに注意してください。オブジェクトを削除すると、その後に続くすべてのオブジェクトのインデックスが1減少し、0≤(すべての有効なインデックス)<(配列内のオブジェクトの数)という不変条件が維持されます。
また、。という名前の変数を宣言したことがないことindex
が原因である可能性もあります。
NSString *fileName = [[file.list objectAtIndex:index] objectForKey:@"soundName"];
NSString *filePaht = [[NSBundle mainBundle] pathForResource:fileName ofType:@"aiff"];
何も起こらないか、NSInternalInconsistencyExceptionが発生する場合は、次のいずれかである可能性があります。
fileList
ですnil
。
- から返されたディクショナリには
[file.list objectAtIndex:index]
、キーのオブジェクトがありませんsoundName
。
コンソールに「セレクターに応答しません」というメッセージが表示された場合は、次のいずれかである可能性があります。
file.list
はオブジェクトですが、NSArrayではありません。
[file.list objectAtIndex:index]
NSDictionaryではありません。
fileName
([[file.list objectAtIndex:index] objectForKey:@"soundName"]
)はNSStringではありません。
変数を宣言するときに使用するクラス名は、コンパイラー以外は重要ではないことに注意してください。実行時には、オブジェクトへのポインタを保持する変数にすぎません。オブジェクトはどのクラスでもかまいません。NSString *
NSStringではないものを変数に入れることは完全に有効です。それは単に、間違った振る舞いやその後すぐにクラッシュするという非常に高い(ほぼ確実な)リスクを伴います。
このようなクラッシュは通常、「セレクターに応答しません」という例外の形で現れます(たとえば、NSStringオブジェクトが応答する必要があるメッセージをオブジェクトに送信した後、オブジェクトは応答しないため応答しません)。 NSStringではありません)。
どちらの問題が発生していても、デバッガーを使用して調査できます。