我有以下代码:
@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)和链接设备框架之间有什么不同?
答案 0 :(得分:0)
我想你可能只包括UIKit框架的模拟器版本。我对此不太确定,但是转到Xcode中的左侧窗格并在 Frameworks 文件夹下,右键单击 UIKit.framework 和获取信息< / strong>即可。在我的路径上,路径为/System/Library/Frameworks/UIKit.framework
,右下方显示路径类型:“相对于当前SDK”。这应该根据您正在构建的内容自动提取正确的框架。
值得一试。
答案 1 :(得分:0)
这可能与iPhone上的类别this issue有关。尝试将-ObjC(iPhone OS 2.x)和-all_load(iPhone OS 3.0)添加到“其他链接标志”中。
答案 2 :(得分:0)
好的,由于没有给出任何答案,我做了不同的事情。
我创建了一个与UIAcceleration完全相同的接口。因为它们都具有相同的内存布局,所以我可以安全地在UIAcceleration和我的类的指针之间进行转换。至少只要gcc想要。