1

次のコードがあります。

@interface UIAcceleration (Simulation)

- (id) initWithTimestamp:(NSTimeInterval)aTimeStamp
                     X:(UIAccelerationValue)ax
                     Y:(UIAccelerationValue)ay
                     Z:(UIAccelerationValue)az;

@end

@implementation UIAcceleration (Simulation)

-(id)initWithTimestamp:(NSTimeInterval)aTimeStamp
                     X:(UIAccelerationValue)ax
                     Y:(UIAccelerationValue)ay
                     Z:(UIAccelerationValue)az 
{
    if (self = [super init])
    {
        timestamp = aTimeStamp;
        x = ax;
        y = ay;
        z = az;
    }

    return self;
}       

@end

これをシミュレーター SDK 用にコンパイルすると、すべて正常に動作します。デバイス SDK 用にコンパイルすると、次のリンカー エラーが発生します。

  "_OBJC_IVAR_$_UIAcceleration.x", referenced from:
      _OBJC_IVAR_$_UIAcceleration.x$non_lazy_ptr in UIAcceleration+IRowAdditions.o
  "_OBJC_IVAR_$_UIAcceleration.y", referenced from:
      _OBJC_IVAR_$_UIAcceleration.y$non_lazy_ptr in UIAcceleration+IRowAdditions.o
  "_OBJC_IVAR_$_UIAcceleration.z", referenced from:
      _OBJC_IVAR_$_UIAcceleration.z$non_lazy_ptr in UIAcceleration+IRowAdditions.o
  "_OBJC_IVAR_$_UIAcceleration.timestamp", referenced from:
      _OBJC_IVAR_$_UIAcceleration.timestamp$non_lazy_ptr in AccelerometerSimulation.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

私は何を間違っていますか?シミュレータ フレームワーク (つまり UIKit) に対するリンクとデバイス フレームワークに対するリンクの違いは何ですか?

4

3 に答える 3

0

わかりました、与えられた答えはどれも役に立たなかったので、私は何か違うことをしました.

UIAcceleration とまったく同じインターフェイスを持つクラスを作成しました。どちらも同じメモリ レイアウトを持っているため、UIAcceleration のポインターとクラスの間で安全にキャストできます。少なくともgccが望む限り。

于 2009-11-10T17:47:17.557 に答える
0

これは、iPhone のカテゴリに関するこの問題に関連している可能性があります。-ObjC (iPhone OS 2.x) と -all_load (iPhone OS 3.0) を「その他のリンカー フラグ」に追加してみてください。

于 2009-10-24T01:23:22.607 に答える
0

おそらく UIKit フレームワークのシミュレータ バージョンのみを含めたと思います。これについてはよくわかりませんが、Xcode の左側のペインに移動し、Frameworksフォルダーの下にあるUIKit.frameworkGet Infoを右クリックします。私の場合、パスは/System/Library/Frameworks/UIKit.frameworkそのすぐ下にあり、そのすぐ下にパスタイプ:「現在のSDKに相対」と表示されています。ビルドの目的に応じて、正しいフレームワークが自動的にプルされるはずです。

チェックする価値があります。

于 2009-10-23T21:29:26.537 に答える