0

特定のビューでは、AVAudioPlayerプロパティがたくさんあり、それぞれが特定のユーザーアクションで再生されることになっています。選択したAVAudioPlayerが再生されているときに、別のAVAudioPlayerが再生された場合は、停止する必要があります。

これを管理するために、すべてのAVAudioPlayerプロパティを保持する配列を作成しました。ユーザーが選択すると、選択したAVAudioPlayerを再生する前に、すべてのAVAudioPlayerを確認して停止します。

問題は、配列を作成するための適切な場所が最初(たとえば、ViewDidLoad)であり、この時点でAVAudioPlayerプロパティのいずれもalloc + initを通過しなかったことです。したがって、デバッガーで配列を見ると、次のように表示されます。空(オブジェクトの数= 0)。現在、ユーザーが実際に特定のAVAudioPlayerを選択している場合にのみ、alloc+initアクションを実行します。

最初はすべてのAVAudioPlayerに対してalloc+initを実行することもできますが、必ずしも必要ではないリソースが必要になります。

必要なリソースを使用せずにこのアレイを作成する方法はありますか?つまり、「空の」オブジェクトを使用してアレイを作成し、後でそれらを割り当てて開始しますか?

4

1 に答える 1

1

私も同じような状況です。私がやってきたことは:

NSArray *myArray = [NSArray arrayWithObjects:@"",@"",@"",@""];

in viewDidLoad(私の配列に4つのオブジェクトがある場合)。次に、入手可能な情報があるので、次のようにします。

[myArray replaceObjectAtIndex:myLocationToAddValue withObject:myObject];

私は、私の会社の他の誰かによって完全に異なる言語で書かれた非常に古いプロジェクトのいくつかのコードを見て、これについてのアイデアを思いつきました。それは私が必要とするもののために働いているようです、そしてそれは私が私の配列をループしてチェックすることができるという追加の利点を持っています

if ([[myArray objectAtIndex:i] length] == 0) 

すでにアイテムがある場所を確認します。追加するオブジェクトはすべてNSStringsになることに注意してください。これがループして、オブジェクトが文字列ではない(または、より一般的には「長さ」を持たない)配列に配置されていることがわかった場合「方法)、厄介なことが起こると思いますが、まだ確認していません。

もっと良い解決策があるはずだと確信していますが、これに対する答えはまだないので、私はそれをそこに出します。うまくいっているように見えるずさんな答えは、答えがないよりはましだと思います。

于 2012-10-10T20:20:08.847 に答える