1

私は先週、12V マリンとボートのバッテリー使用量を計算する最初のソロ iPhone アプリをリリースしました。シミュレーターと iPhone で精力的にテストし、問題なく動作するようになったら、アプリをアーカイブして Apple にリリースしました。ユーザーがアプリを使い始めたとき、計算が期待どおりに機能していないことに気づきました。NSManagedObject モデルのメソッドである以下のコードは、デバッグ時にリリースされたときに異なる出力を生成していました。

以下は、関連する Discharge 項目の合計を合計する必要がありますが、BBDischarge 項目がない場合はゼロを返す必要があります。代わりに、アイテムがない場合 (したがって for ループが起動しない場合)、domesticAH (NSNumber) の直積である数値を返します。私がdomesticAHを100に設定すると、以下のdischargeAHは8を返し、domesticAHを1000に設定すると83を返します(浮動小数点数は表示時に丸められます)。繰り返しになりますが、シミュレーターで実行した場合、または iPhone 4s に直接配置した場合、以下は問題なく動作することを強調します。

//Other dynamics hidden for simplicity
@dynamic domesticAH;
@dynamic voltage;
@dynamic profileDischarge;

-(NSNumber*) dischargeAmpH
{

    float totalWattsPD;

    //Calculate the watts per day so we can accurately calculate the percentage of each item line
    for(BBDischarge* currentDischarge in self.profileDischarge)
    {
        float totalWatt = [currentDischarge.wattage floatValue] ;
        float totalMinsPD = [currentDischarge.minutesPD floatValue]/60;
        float totaltimesUsed = [currentDischarge.timesUsed floatValue];
        float numberInOperation = [currentDischarge.number floatValue];
        totalWattsPD = totalWattsPD + ((totalWatt * totalMinsPD) * (totaltimesUsed * numberInOperation));
    }

    int voltage = ([self.voltage integerValue] + 1) * 12;

    float totalAmpsPD = totalWattsPD / voltage;

    return [NSNumber numberWithFloat:totalAmpsPD];

}

ご覧のとおり、self.domesticAH はメソッドのどこにも含まれていません。シミュレーターでこれを再現できないため、これを追跡するのに苦労しています。

いくつかの質問:

  • アプリのライブ バージョンをデバッグできますか? XCode を実行中の App Store からダウンロードしたアプリのインスタンスにアタッチしますか?
  • アーカイブからのインストールをシミュレートする方法はありますか?これを行うためにアドホック配布を推奨する人はいますか? 私はまだアドホックを使用していません。
  • これがこのように動作する理由は他にありますか?
4

1 に答える 1

1

答えよりもヒントですが、コメントですでに述べたように、リリースバージョンとデバッグバージョンの動作の違いを確認できます。

この異なる「振る舞い」は過去に見られました。「最適化レベル」の設定で与えられます。デバッグバージョンはNone[-O0]に設定され、リリースバージョンはFastest、Smallest[-Os]に設定されます。

ここの例..ここの別の..

于 2013-01-09T08:23:20.737 に答える