2011-07-22 11 views
0

私はこのコードをビルドしていますが、INVALID整数からポインタ変換への警告が出ています。 しかし、私はいずれかが私を助けることができる.....オブジェクトCのポインタ変換に無効な整数

を、それがクラッシュを取得するアプリケーションを実行すると...私はwithObjectで警告を取得しています:[送信者タグ]を

を私は(NSIngeterをとるfrontButtonScaleUpメソッドを持っていますまた)引数...とタグがNSInteger値を返す...

- (IBAction)frontButtonReleased:(id)sender 
{ 
    const double delay = 0.3; 
    double elapsed = CACurrentMediaTime() - tapStartTime;; 
    if (elapsed >= delay) 
     [self frontButtonScaleUp:[sender tag]]; 
    else 
     [self performSelector:@selector(frontButtonScaleUp) withObject:[sender tag] afterDelay:delay - elapsed]; 
} 

答えて

0

ここ
- (IBAction)frontButtonReleased:(id)sender 
{ 
    const double delay = 0.4; 
    double elapsed = CACurrentMediaTime() - tapStartTime;; 
    UIButton *btn = (UIButton *)sender; 

    if (isBtnOneTurnOver || isBtnTwoTurnOver) 
    { 
     if ([btn tag] == 1) 
     { 
      if (elapsed >= delay) 
       [self btnOneScaleUp]; 
      else 
       [self performSelector:@selector(btnOneScaleUp) withObject:nil afterDelay:(delay - elapsed)]; 
     } 
     else 
     { 
      if (elapsed >= delay) 
       [self btnTwoScaleUp]; 
      else 
       [self performSelector:@selector(btnTwoScaleUp) withObject:nil afterDelay:(delay - elapsed)]; 
     } 
    } 
} 

私は各ボタンの2つの新しいメソッドを作り、通過の問題という引数を持たないので...両方いますwithObjectが解決されました....

5

[sender tag]はNSIntegerであり、それはそこにオブジェクトを期待するとして、あなたはperformSelector:withObject:afterDelay:にそれを渡すことはできません。

[self performSelector:@selector(frontButtonScaleUp) withObject:[NSNumber numberWithInt:[sender tag]] afterDelay:delay - elapsed]; 

または私はそれらのいずれかのか分からないが、それが動作するかどうか私に教えてください

[self performSelector:@selector(frontButtonScaleUp) withObject:(id)[sender tag] afterDelay:delay - elapsed]; 

を試してください:あなたはどうすることができ、このように関数を呼び出しています。

+0

ニースの答え。最初の人は必ず動作します。 +1 –

+0

+1を第1の答えに、-1を第2の答えに-1;フレームワークがオブジェクト上で 'retain'を呼び出すかどうかはわかりません(もしintが恐ろしく失敗すれば!) – deanWombourne

+0

警告は表示されませんが、最初の状況ではアプリケーションがクラッシュします。 .2番目の状況では、EXC_BAD_EXECUTIONエラーが発生しました.... – DShah

0

コードの場合と同じようにボタンのタグを取得することはできません。 、あなたの方法frontButtonScaleUpが何を知らなくても、私は決定的な答えを与えることはできませんうーん、あなたの問題は

- (IBAction)frontButtonReleased:(id)sender 
{ 

UIButton *button = (UIButton *)sender; 
     int Btag = button.tag; 

const double delay = 0.3; 
double elapsed = CACurrentMediaTime() - tapStartTime;; 
if (elapsed >= delay) 
    [self frontButtonScaleUp:Btag]; 
else 
    [self performSelector:@selector(frontButtonScaleUp) withObject:Btag afterDelay:delay - elapsed]; 
} 
+0

私は同じコードを使用していますが、まだ私はwithObjectで警告を受け取ります: 'int'を 'id'型のパラメータに送るポインタ変換への互換性のない整数...誰にでも私がオブジェクトで渡すべきことを教えてもらえますか???????? – DShah

+1

intの代わりにデータ型 'id'を使用し、それを次のように使用します。 id Btag = button.tag; –

0

を解決します]ボタンを取得し、それを使用するには、このようにそれを行うが、私は伝えることができますこれは - タグのNSViewの属性は、有用な値であることを保証するものではありません。これは、クラスの便利な属性であり、開発者はかなり使いたいと思っています。この属性をポインタと混同しないでください。このコード行で

if (elapsed >= delay) 
    [self frontButtonScaleUp:[sender tag]]; 

私は本当に私が言った理由のようにコメントすることはできませんが、私はfrontButtonScaleUpの定義や実装があるかわかりません。しかし、私はあなたが何かのidを期待していると推測して、代わりにintを渡します。あなたのコードが無作為にそうすることになる場合、あなたのコードはほぼ確実にここで爆破されます。

このライン:

else 
    [self performSelector:@selector(frontButtonScaleUp) withObject:[sender tag afterDelay:delay - elapsed]; 

は間違いなく間違っている - もう一度、int型= ID!。

ボタンをタップした後、一定の遅延の後にボタンのサイズを大きくしようとしていると思いますか?あなたは既にボタンのIDを持っています。送信者のパラメータがあなたの関数にあります。 frontButtonScaleUpメソッドに渡すだけで、コンパイラの警告と* EXC_BAD_ACCESS *の例外を越える必要があります。

私は以下のように少し修正を加えた作品私のコードをした
if (elapsed >= delay) 
    [self frontButtonScaleUp:[sender]]; 
+0

はい、ボタンのサイズを大きくしたいです。だから、私のfrontButtonScaleUpはボタンのリファレンスをとり、私は別のプロジェクトで動作する単純なコードを使用しています...しかし、ここで私は2つのボタンが同じコードを使用したい.. thatsなぜボタン参照の代わりに送信者を使用しているthats ... – DShah

+0

@ダーリンシャー - 私が思ったthats。私の答えからコードを試しましたか?あなたは* [送信者タグ] *の代わりに*送信者*を渡すことができなければなりません。 – Perception

+0

私もSenderで試したことがありますが、コードが他の部分に入ったとき....私のアプリはクラッシュする... withObjectsのために... – DShah

関連する問題