0

そこで、iOSゲームをプログラミングし、ランダムなパワーアップを選択するためにarc4random_uniformを使用しています。

Simでは正常に動作しますが、私の電話では(syslogから)次のエラーがスローされます。

Nov 26 13:44:26 iPhone ----[2184]: placePowerupCalled
Nov 26 13:44:26 iPhone UIKitApplication:com.yourcompany.-----[0x1f08][2184]: dyld:  lazy symbol binding failed: Symbol not found: _arc4random_uniform
Nov 26 13:44:26 iPhone UIKitApplication:com.yourcompany.-----[0x1f08][2184]:   Referenced from: /Applications/------.app/-----
Nov 26 13:44:26 iPhone UIKitApplication:com.yourcompany.------[0x1f08][2184]:         Expected in: /usr/lib/libSystem.B.dylib
Nov 26 13:44:26 iPhone UIKitApplication:com.yourcompany.------[0x1f08][2184]: dyld: Symbol not found: _arc4random_uniform
Nov 26 13:44:26 iPhone UIKitApplication:com.yourcompany.-----[0x1f08][2184]:   Referenced from: /Applications/------.app/-------
Nov 26 13:44:26 iPhone UIKitApplication:com.yourcompany.-----[0x1f08][2184]:   Expected in: /usr/lib/libSystem.B.dylib
Nov 26 13:44:27 iPhone ReportCrash[2185]: Formulating crash report for process -----[2184]
 Nov 26 13:44:27 iPhone com.apple.launchd[1] (UIKitApplication:com.yourcompany.-----[0x1f08][2184]): (UIKitApplication:com.yourcompany.-----[0x1f08]) Job appears to have crashed: Trace/BPT trap
Nov 26 13:44:27 iPhone SpringBoard[2161]: Application '-----' exited abnormally with signal 5: Trace/BPT trap

何が問題なのかよくわかりません。arc4randomの元となるヘッダーファイル(#include "stdlib.h")もインクルードしましたが、機能しませんでした。

誰かアイデアはありますか?ありがとう !:)


編集:バイナリを「libSystem.b.dylib」ライブラリにリンクしようとしましたが、それも機能せず、同じエラーでクラッシュします。

4

2 に答える 2

5

arc4_uniform 関数は iOS 4.3 で追加されたもので、それ以前のバージョンでは動作しません。シミュレーターを 4.3 以降で実行しているようですが、デバイスの iOS バージョンはそれ以前です。4.3 より前のバージョンでアプリをサポートする予定がある場合は、代わりにこれを使用してみてください。

arc4random() % upperBoundExclusive

arc4_uniform ほど正確にランダムではないかもしれませんが、動作します。

于 2011-12-03T10:59:01.317 に答える
1

arc4random_uniform は、iOS 4.3 未満では使用できません。幸いなことに、iOS は実行時にこのシンボルをバインドし、利用できない場合は null に割り当てます (したがって、「遅延シンボル バインディング」エラー)。

したがって、arc4random_uniform を使用する最善の方法は、最初に利用可能かどうかを次のように確認することです。

#include <stdlib.h>
...
int r = 0;
if (arc4random_uniform != NULL)
    r = arc4random_uniform (100);
else
    r = (arc4random() % 100);
于 2012-06-19T12:42:39.450 に答える