2012-03-05 8 views
1

これは私が初めて何かを尋ねているので、あまりにも厳しくはありません:-)。私は奇妙な "悪いアクセス"の問題があります。私のクラスでは、他のメンバーと一緒にNSIntegerがあります。NSIntegerを印刷するときに奇妙なBAD_ACCESS

- (NSString *)description { 
    return [NSString stringWithFormat:@"Duration:%d", duration]; 
} 

をし、私は印刷に関係なくNSZombieEnabledの、いずれかのログメッセージなしで私にEXC_BAD_ACCESSを与えているNSLog(@"%@", myObject)を使用して:私は(unrelevant一部を省略)ので、同じようにすべての値を印刷する- (NSString *)descriptionメソッドをオーバーライドします。

  • すべての書式指定子の順序と、 パラメータの順序を二重にチェックしました。正しいです。
  • 私は%i%@に書式指定を変更しようとした私は、オブジェクトを初期化するとき、私は 期間を初期化していない任意の結果
  • を取得できませんでした。後で、プロパティ@property NSInteger durationを使用して割り当てます。だから私はinit の方法で0に継続時間を初期化しようとしましたが、役に立たないです。
  • 印刷前のNSNumberまでのIボックスの期間は、動作します。
  • 期間を削除して、すべての のイールズを残すと、再び動作します。

ここで私は間違っていますか? 私を助けることができますか?

ありがとうございます!

EDIT:要約すると、これは32ビットと64ビットのプラットフォームの違いに起因すると思われます.iphone 4で動作し、シミュレータで実行されているときだけ問題があるためです。私は%qiを使用し、%ld/%lxを使用して、%d%iをNSInteger変数と一緒に使ってみました。また、さまざまな書式指定子でintlongにキャストしようとしました。私は、デバイス上で実行することができますが、シミュレータでEXC_BAD_ACCESSを得るたびに。

+0

あなたのメソッドにbrakpointを設定し、あなたの "duration"値を読んで、私がそこにいるときに設定されていないと思う... –

+0

NSLogでブレークポイントを設定しました - myObjectは有効で、そこに...ありがとうとにかくマルコ! – Lubo

+0

少しコードを投稿してください – Novarg

答えて

1

NSIntegerはあなたのケースでは64ビットで、%i(と%d)は32ビット整数を期待しています。%qiを試してみてください。 。

+0

Hey Gobraさん、 '%qi'と'%qu'を使って試してみました。また、 'int'にキャストしましたが、何も変わりません。私はボクシングのオプションと一緒に行くことができますが、私はどこかでミスをしているかどうかを知りたいです...答えていただきありがとうございます! – Lubo

-1

多分あなたの財産を合成する必要がありますか?

+0

私はすでにパダバンを行っていますが、それは問題ではないと思います。ありがとうございました! – Lubo

0

デバッガでアプリを実行すると、が正確にの信号が発生しますか? Xcodeは問題の正確な行とスタックを表示します。

stringWithFormat:の方法でクラッシュが発生したと思われるときは、おそらくフォーマット指定子の問題です。 AppleのString Programming Guide contains informationは、安全でプラットフォームに依存しない方法でNSIntegerをどのように扱うべきかについて述べています。

+0

信号は 'stringWithFormat:'メソッドの中から来ます。 Nikolaiのリンクをありがとう、私はそれを何度も参照していますが、プラットフォームの依存関係については一番下の部分を見逃しています。しかし、 '%ld'や'%lx'を使ってキャスト(long)すると、デバイス(iphone 4)でしか動かないのですが、シミュレータではまだ悪いアクセスをしています。 '%d'や'%i'をキャストなしで使うときと同じことです... – Lubo

関連する問題