-2

私はレベルのあるゲームを作っており、2回比較する方法を探しています。1 回目はプレイヤーがレベルを完了するのに必要な時間で、2 回目は私が選択した時間です。1 回目が 2 回目より少ない場合は星を獲得し、それが高い場合は星を獲得しません。以下のコードでわかるように、NSDates に 2 回保存しました。NSComparisonResult を使用して結果を比較します。私の問題は、 NSComparisonResult Result1 = 4294967295 が NSOrderedDescending などの代わりに発生することです。

    NSDate *currentDate = [NSDate date];
    NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:self.startDate];
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];

    NSComparisonResult result1;
    NSComparisonResult result2;
    NSComparisonResult result3;
    // Create a date formatter
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"mm:ss.SSS"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];

    //has three possible values: NSOrderedSame,NSOrderedDescending, NSOrderedAscending
    NSDate *level1ThreeStarRequirement = [dateFormatter dateFromString:@"00:01.500"];
    NSDate *level1TwoStarRequirement = [dateFormatter dateFromString:@"00:02.500"];
    NSDate *level1OneStarRequirement = [dateFormatter dateFromString:@"00:02.500"];

    result1 = [timerDate compare:level1ThreeStarRequirement]; // comparing two dates
    result2 = [timerDate compare:level1TwoStarRequirement];
    result3 = [timerDate compare:level1OneStarRequirement];
    if (result1 == NSOrderedAscending){
        self.star1.image = [UIImage imageNamed:@"star1.png"];
        self.star2.image = [UIImage imageNamed:@"star2.png"];
        self.star3.image = [UIImage imageNamed:@"star3.png"];
    }
    if (result2 == NSOrderedAscending){
        self.star1.image = [UIImage imageNamed:@"star1.png"];
        self.star2.image = [UIImage imageNamed:@"star2.png"];
        self.star3.image = [UIImage imageNamed:@"noStar.png"];

    }
    if (result3 == NSOrderedDescending){
        self.star1.image = [UIImage imageNamed:@"star1.png"];
        self.star2.image = [UIImage imageNamed:@"noStar.png"];
        self.star3.image = [UIImage imageNamed:@"noStar.png"];
    }

ありがとうマティス

4

1 に答える 1

1

の組み込み関数のいずれかを使用して日付を比較しないのはなぜですかNSDate

– timeIntervalSinceDate:
– timeIntervalSinceNow
+ timeIntervalSinceReferenceDate
– timeIntervalSinceReferenceDate
– timeIntervalSince1970

これにより、秒単位の値が得られます。あなたのresult1etc は、壊れた数字であってはならず、時間を互いに直接比較して、そのように並べ替えることができます

于 2013-06-24T12:57:45.610 に答える