2012-12-30 69 views
1

我綁定了一個ObjC庫,它一切正常,但我有一個問題。 ObjC庫正在使用一些單獨標題中定義的值。MonoTouch綁定 - 綁定#DEF從單獨的標題

例如,對於首標:

#define SOME_PROPERTY_1 TRUE 
#define SOME_PROPERTY_2 TRUE 
#define SOME_PROPERTY_3 FALSE 

依賴於這些特性,圖書館將作出一些改變到視圖(所以這些變化是在庫中,不是在我的C#代碼)。

我想從我的C#代碼中訪問這些屬性,以便我可以更改它們。現在我需要再次建立我的圖書館,如果我想改變他們,我不能動態地改變他們(目標是什麼)。

這可能嗎?

我搜索過,但我不明白這兩個提議的解決方案:

  1. 把它們放在我的C#代碼,而不是在我的結合 - >我想這是不是一個解決方案,因爲在這種情況下,圖書館將不知道這些變化? (無連接)
  2. 綁定他們作爲(靜態)屬性

不幸的是,我不知道如何做到這一點。在這個頭文件中,這些不是類/接口,只有#DEF語句,所以我不知道在哪個'類'中我應該定義這些屬性。

該標題包含在其他一些ObjC類中。我試圖看看是否可以在那裏定義它們,但它是一個接口和屬性不被接受。

所以基本上,有說我結合「SomeController」類和「SomeController.h」被定義爲接口

@interface SomeController : UIViewController 

並在「SomeController.m」那麼你有

#import "Constants.h" //The file with only #DEF statements 
@implementation SomeController 
{ 
... 
} 

任何想法?

問候, 馬特

回答

2

這是不可能的,因爲你的SOME_PROPERTY_#實際上不是變量,他們預處理指令。

這意味着ObjectiveC預處理器會將您的源代碼中的所有SOME_PROPERTY_#實例替換爲您定義的值,但最終可執行文件中沒有SOME_PROPERTY_#variable /常量。

例如:

#define SOME_PROPERTY_1 TRUE 
void foo() 
{ 
    Bool value = SOME_PROPERTY_1; 
} 

將由預處理器被轉換爲這樣:

void foo() 
{ 
    Bool value = TRUE; 
} 

正如你可以看到有在轉換源代碼沒有SOME_PROPERTY_1。

這意味着您不能動態更改SOME_PROPERTY_#的值。

+0

感謝您的回答 – Matt