1

これはおそらく私に多くの反対票を与えるでしょうが、まあ。私はAS3のバックグラウンドから来ていることを心に留めておいてください。

そうです、私は何かが植えられた/建設が始まってからどれくらいの時間が経過したかの表示をコーディングしている最中です。timeToCompletion値と、timeSincePlanting値が次のように表示されます。

 //get seconds since planting/construction start
    NSDate *now = [NSDate date];
    NSTimeInterval secondsSincePlantingInterval = [now timeIntervalSinceDate:plantingDate];

    //convert to Number
    NSNumber *secondsSincePlanting = [NSNumber numberWithDouble:secondsSincePlantingInterval];

    //get template object
    NSDictionary *templateObject = [self getTemplate:kingdomObject];

    //get how long I should take (in seconds)
    NSNumber *timeToCompletion = [templateObject objectForKey:@"constructionTime"];

そして、私がこれをやろうとするまで、すべてが泳いでいました...

 NSNumber *timeLeft = [NSNumber numberWithInt:0];

 timeLeft = timeToCompletion - secondsSincePlanting;

AS3から来るのは私の自然な本能ですが、今ではそれがおそらくポインターからポインターを減算しようとしているだけだと気づきましたか?

最初の質問は、2つのNSNumberでそれをどのように行うことができるかということです。それが不可能で、NSDecimalNumberを使用する必要がある場合は、すべてをNSDecimalNumberに変換して、そのように減算しますか?唯一のことは、秒を表すので整数が必要なだけで、小数点以下の桁数などを入力する必要はありません。

4

2 に答える 2

4

NSNumberオブジェクトは使用しないでください。

NSDate *now = [NSDate date];
NSTimeInterval secondsSincePlantingInterval = [now timeIntervalSinceDate:plantingDate];

//get template object
NSDictionary *templateObject = [self getTemplate:kingdomObject];

//get how long I should take (in seconds)
NSNumber *timeToCompletion = [templateObject objectForKey:@"constructionTime"];
NSTimeInterval completionInterval = [timeToCompletion doubleValue];

NSTimeInterval timeLeft = completionInterval - secondsSincePlantingInterval;
于 2012-11-06T19:35:57.290 に答える
3

あなたはおそらくオブジェクト指向言語をあまり扱ったことがないでしょう。NSIntegerそして、 (「スカラー」値である)とNSNumber(オブジェクトである) の間で混乱するのは簡単です。

AnNSNumberは数値の「コンテナ」ですが、数値のように算術演算で使用することはできません。むしろ、それに含まれる値にアクセスする必要があります。

また、sayingNSNumber *timeLeft = [NSNumber numberWithInt:0];は数値をゼロに初期化するのではなくtimeLeft、値0を「ラップ」する不変のNSNumberオブジェクトへのポインターに格納することに注意してください。その後、次のステートメントでそのオブジェクトを変更しません(それがあなたのように機能した場合)と思いました)が、代わりに1つのポインタを別のポインタに置き換えるため、最初の行は役に立ちません。

于 2012-11-06T19:37:28.633 に答える