2012-08-22 166 views
4

我有一個靜態變量,我想從另一個類在同一個項目中訪問X代碼。我已經在.h文件和.m文件中聲明它,給它一個值,然後當我訪問另一個類時,我收到一條錯誤消息,說:靜態變量不能從另一個類訪問

「Property'xx'not found on 「yy」類型的對象

我在.h中聲明變量爲extern,並將其重新聲明爲.m中的變量類型。我試圖在.h中將其更改爲static,但它仍然無效。是的,我已經導入了包含變量的文件,以防出現問題。

任何人都可以幫助我嗎?

編輯:

這是我目前使用的代碼:

source.h

static int anObject; 

@interface source : NSObject 

source.m

static int a = 2 

@implementation source 

destination.m

# include "source.h" 

@implementation destination 

- (void) anObjectTestFunction 

{  
    printf("%d", source.anObject); //the first version 
    printf("%d", anObject); //second version 
} 
現在經過我去了第二個版本

,變量anObject在destination.h可以被訪問,但其價值是不2,它是0。我希望它按照一個我在source.h中聲明。

+2

聽起來像你試圖訪問一個全局變量,就好像它是一個對象的屬性。只需輸入變量名稱即可。但是,粘貼一些代碼並且幫助你會容易得多。 – MechEthan

+0

是什麼讓你覺得'anObject'應該設置爲2?你還沒有設置任何東西。在你的.m文件中,你設置了'a = 2',我期望它是2.'anObject'從我的例子中看不到,因爲它是一個整數,它將是0. – Joe

回答

8

我假設在.h文件中聲明的靜態變量在@interface之外。因此,像:

static NSString *myObjectTest = @"Test"; 

@interface MyObject : NSObject 
@end 

如果是這樣的話,那麼你將不能夠使用類似訪問它:

MyObject *obj = [[MyObject alloc] init]; 
[obj myObject] 

obj.myObject 

這是什麼給你在'yy'類型的對象上找不到'Property'xx'「。該靜態變量不是MyObject對象的屬性。

靜態變量是像這樣myObjectTest只要你導入.h文件訪問

更新 下面爲什麼這是一個壞主意,做這樣看得見Chuck的評論。

+1

將一個靜態變量放在你的頭文件中幾乎從來不是你想要做的。它會給每個使用你的類的文件一個不同的變量副本。 – Chuck

+0

我同意。我只是假設(從所說的內容來看)這就是所做的。 – Joe

-1

這可能是一個命名空間問題?嘗試完全限定您的訪問權限。發佈你的代碼的提取真的會有幫助,但我不擅長透視:-)

+1

Objective-C doesn沒有命名空間。 – Chuck

+0

我表態更正了,謝謝 – staafl

2

你似乎對什麼是靜態變量感到困惑。在Java或C++等其他語言中,「靜態」可以表示以下兩種情況之一。在文件或函數作用域中,它表示變量的作用域是該程序整個生命週期中存在的文件或函數。在類作用域中,它意味着只是一個類變量。

C++有兩個定義,Java只有第二個定義,但Objective-C只有第一個定義:一個靜態變量只能用於聲明它的地方。沒有像「外部靜態」變量這樣的東西,因爲這兩者是矛盾的。你可能想要一個全局變量或一個帶有類方法的靜態變量來訪問它。