2009-10-23 75 views
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)和鏈接到設備框架之間有什麼不同?

+0

您是否嘗試清潔項目並重建? – 2009-10-23 21:21:58

+0

是padpadpadpad – 2009-10-23 21:56:48

回答

0

好吧,因爲沒有給出的答案有幫助,我做了一些不同的事情。

我創建了一個與UIAcceleration界面完全相同的類。因爲它們都具有相同的內存佈局,所以我可以安全地在UIAcceleration和我的類的指針之間進行轉換。至少只要gcc想要。

0

我想你可能只包含UIKit框架的模擬器版本。我對此不太確定,但轉到Xcode中的左側窗格並在框架文件夾中,右鍵單擊UIKit.framework獲取信息。在我的路上,路徑是/System/Library/Frameworks/UIKit.framework,正下方說的是路徑類型:「相對於當前的SDK」。這應該根據你正在構建的內容自動調整正確的框架。

值得一檢查。

+0

我檢查過。一切都按照你所說的方式設置。不是解決方案。 – 2009-10-23 21:59:07

0

這可能與iPhone上的類別this issue有關。嘗試在您的「其他鏈接器標誌」中添加-ObjC(iPhone OS 2.x)和-all_load(iPhone OS 3.0)。

+0

也沒有幫助。感謝您的建議。 – 2009-10-24 07:22:52