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);
}

这将以秒为单位存储每首歌曲的时间。然后你可以根据你的需要操纵这个值。

编辑:

看到您的编辑后:

我如何确保每次迭代只获得一个持续时间?

您可以向您的方法发送一个值,该值将返回该特定歌曲的持续时间。或者就像我之前的回答一样,每个持续时间都保存在基于索引的数组中,您可以从那里轻松检索。

于 2013-01-25T19:33:00.303 回答