0

私は Objective-C を初めて使用するので、少し助けが必要です。私は曲の配列を持っています:

   {
    artist = "Bernard Herrmann";
    duration = "2:34";
    id = 5;
    title = "Torn Curtain: The Unused Score";
},
    {
    artist = "Miklos Razsa";
    duration = "3:47";
    id = 6;
    title = "Ivanhoe [Original]";
},
...etc.

そして、配列を反復処理して、期間(現在NSStrings)を実際の経過時間を表すために使用できるものに変換し、それらを合計して、プレイリストを再生する合計時間を取得できるようにします。私はループに取り組み始めました:

更新しました:

- (NSInteger)convertDuration
{
    NSInteger totalSeconds=0;
    for(NSMutableArray *song in playlist){
        NSString *durationString = [playlist valueForKey:@"duration"];
        NSArray *breakMinSec = [durationString componentsSeparatedByString:@":"];
        NSInteger sec = [breakMinSec[1]integerValue];
        NSInteger min = [breakMinSec[0]integerValue];
        totalSeconds += ( sec + min * 60 );
        }
    return totalSeconds;
}

現在のところ、durationString は最初の繰り返しですべての期間を取得しているようです。このようにコンパイルされません。各反復で単一の期間のみを確実に取得するにはどうすればよいですか?

4

1 に答える 1

0

ここでは、NSTimeIntervalまたはNSDateに変換する必要はありません。すべての期間を配列に追加するだけです。次に、分と秒を分割し、すべての分とすべての秒を追加します。

それで

 totalSeconds%=60;
 totalMinutes+=totalSeconds/60;

編集:あなたがどのようにできるかという考え(コンパイラーチェックされていない)

//NSMutableArray *durationArray=[NSMutableArray new];
NSInteger totalseconds=0;
for(NSDictionary *song in songDict){
    NSString *durationString=song[@"duration"];
    NSArray *breakMinSec=[durationString componentsSepartedByString:@":"];
    NSInteger sec=[breakMinsec[1]integerValue];
    NSInteger min=[[breakMinSec[0]integerValue];
    //[durationArray addObject:@[sec+min*60]];
    totalseconds+=(sec+min*60);
}

これにより、各曲の時間が秒単位で保存されます。次に、必要に応じてこの値を操作できます。

編集:

あなたの編集を見た後:

反復ごとに1つの期間のみを取得するようにするにはどうすればよいですか?

その特定の曲の継続時間を返す値をメソッドに送信できます。または、以前の回答のように、各期間はインデックスベースの配列に保存されていたので、そこから簡単に取得できました。

于 2013-01-25T19:33:00.303 に答える