-6

私は iOS 開発の初心者です。次のような配列があります。

NSMutableArray *array = [[NSMutableArray alloc] init]; 

[array addObject:[NSNumber numberWithInt:15:00]];
[array addObject:[NSNumber numberWithInt:20:05]];
[array addObject:[NSNumber numberWithInt:1:20]];
[array addObject:[NSNumber numberWithInt:3:40]];

どの配列オブジェクトが現在の時間よりも大きい次のものかを示すラベルが必要です。たとえば、現在の時刻が 2:00 の場合、ラベルには次の大きい数字である 3:40 だけが表示されます。これ以上の数値ではありません。

この 1 つのより大きな要素をどのように識別できますか?

4

3 に答える 3

2

まず、なぜ追加NSNumbersするのNSArrayですか?これらはNSDateオブジェクトでなければなりません。

そうする場合、次のように NSDate の比較メソッドを使用できます。

[date1 compare: date2];

あなたの場合、現在の時刻の直後に時刻を表示したい場合は、次のようにします。

NSDate *currentTime = [NSDate dateWithTimeIntervalSinceNow:0];
NSUInteger smallestInterval = -1;
NSInteger smallestDateIndex = -1;

for(int i = 0; i < array.count; i++){
    if([currentTime timeIntervalSinceDate:[array objectAtIndex:i]] <= 0){
    continue;
    }

    if(smallestDateIndex == -1){
        smallestDateIndex = i;
        smallestInterval = [currentTime timeIntervalSinceDate:[array objectAtIndex:i]];
    } else if([currentTime timeIntervalSinceDate:[array objectAtIndex:i]] < smallestInterval){
    smallestInterval = [currentTime timeIntervalSinceDate:[array objectAtIndex:i]];
    smallestDateIndex = i;
    }
}

if(smallestDateIndex > -1){
    NSDateFormatter *formatter = [[NSDateFormatter alloc] initWithDateFormat:@"HH:mm"];
    myLabel.text = [formatter stringFromDate:[array objectAtIndex:smallestDateIndex]];
}
于 2012-08-11T15:45:01.357 に答える
2

まず、15:00 が int ではないことを学ぶ必要があります。

を使用し、使用NSDateしないNSNumber

于 2012-08-11T15:47:37.563 に答える
-1

表には4回表示できます。

ss

コードは以下のとおりです。

array = [NSMutableArray array];
NSDate *date;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSString *s = @"HH:mm";
dateFormatter.dateFormat = s;

date = [dateFormatter dateFromString:@"15:00"];
[array addObject:date];

date = [dateFormatter dateFromString:@"20:05"];
[array addObject:date];

date = [dateFormatter dateFromString:@"1:20"];
[array addObject:date];

date = [dateFormatter dateFromString:@"3:40"];
[array addObject:date];

日付を比較するには、NSDate クラスの campare メソッドを使用できます。

NSComparisonResult result = [dt1 compare:dt];
switch(result)
{
case NSOrderedAscending:
    // dt is bigger than dt1
    break;
case NSOrderedDescending:
    // dt is smaller than dt1
    break;
case NSOrderedSame:
    // dt is same with dt1
    break;
}

GitHub からプロジェクトをダウンロードして、実行するだけです。

https://github.com/weed/p120812_NSDateSumple

于 2012-08-11T16:15:03.667 に答える