2

timeIntervalを整数値と比較しようとしているので、timeIntervalを整数に変換して比較します。しかし、「ポインタ型に変換できません」というエラーが発生します。

NSTimeInterval timeInterval = [startTime timeIntervalSinceNow];
int intSecondsElapsed = [timeInterval intValue]; // Error here !!!!

if ([counterInt != intSecondsElapsed])
{
    // Do something here...
}

これをどうやってやるの?

編集:実行エラーに関連する詳細を含めます。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    //[formatter setDateFormat:@"HH:mm:ss"];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    startTime = [NSDate date];
    [formatter release];


if ([deviceType isEqualToString:@"iPhone 4"]||[deviceType isEqualToString:@"iPhone Simulator"])
    {
        int intSecondsElapsed = (int)[startTime timeIntervalSinceNow];
        if (counterInt != intSecondsElapsed)
        {
            counterInt = intSecondsElapsed;
        }
    }
4

2 に答える 2

6

NSTimeIntervalはdoubleとして定義されているため、intに変換する場合は、単純な型キャストを作成できます。

NSTimeInterval timeInterval = [startTime timeIntervalSinceNow];
int intSecondsElapsed = (int)timeInterval;

または単に

int intSecondsElapsed = (int)[startTime timeIntervalSinceNow];

編集:変数を初期化startTimeしてさまざまな関数で使用する場合は、変数を保持する必要があります。[NSDate date]自動解放されたオブジェクトを返すため、作成されたスコープ外では無効になります。物事を簡単にするために、retain属性を使用してプロパティを宣言し、を使用してプロパティをstartTime作成します

self.startTime = [NSDate date];

そして、クラスdeallocメソッドでそれをリリースすることを忘れないでください。

于 2010-09-23T11:57:45.603 に答える
2

intValueウラジミールが言ったことは正確に正しいです。「ポインタ型に変換できません」というエラーが表示された理由は、にメッセージを送信しようとしたためです。これは、送信してtimeIntervalいるものが送信された場合にのみ実行できます。 toのメッセージは、それに応答するオブジェクトへのポインタです。コンパイラーはtimeIntervalポインターとして処理しようとしましたが、失敗しました。

于 2010-09-23T12:21:29.033 に答える