2010-11-29 15 views
1

私はこのサイトを初めて使っています。あなたが助けてくれることを願っております。ipad app development:Block_copy not working

は、私は、関数で次のコード()からEXC_BAD_ACCESSエラーを取得:

typedef int (^BlockDef)(); 
BlockDef getBlockDef(int d) 
{ 
    BlockDef def = Block_copy(^() 
    { 
     return d; 
    }); 

    return def; 
} 

void function() 
{ 
    BlockDef def1 = getBlockDef(1); 
    BlockDef def2 = getBlockDef(2); 

    printf("%d\n",def1()); 
    printf("%d\n",def2()); 

    NSMutableArray * arr = [NSMutableArray array]; 
    [arr addObject:def1]; 
    [arr addObject:def2]; 

    printf("%d\n",((BlockDef) [arr objectAtIndex:0])()); // **** EXC_BAD_ACCESS here 
    printf("%d\n",((BlockDef) [arr objectAtIndex:1])()); 
} 

このコードは、ipadの中でiphoneで問題なく動作しますが、ありません。何が問題なのでしょうか?

また、ipadでは、Block_copy呼び出しを削除すると、同じ行が正常に実行されます。コピーされていない関数は返されないか、呼び出されてはいけないので、これは奇妙です(iphoneでは、この状況では最初のprintfでEXC_BAD_ACCESSを取得します)。

ありがとうございました。

答えて

1

あなたがiPadと言うとき、3.2を意味しますか?もしそうなら、これは動作しません。 3.2には、コピーブロック以外のすべてを行うことができるハーフブロックAPIがあります。

あなたのiPadが4.2以降で、まだ動作しない場合は、教えてください。

+0

sdkは4.0.2ですが、私はipadデバイスを持っていませんが(明日には取得します)、このコードをシミュレータで実行しました。 4.2へのアップデートはこの問題を解決するでしょうか? –

+1

はい、もしあなたが4.0 SDKを使っているなら、あなたのiPad simは3.2 –

+0

です。おそらくiPadと同様に4.2 SDKを入手する必要があります。 – JeremyP