Objective c 绑定#定义用作常量

Objective c 绑定#定义用作常量,objective-c,binding,xamarin.ios,Objective C,Binding,Xamarin.ios,我试图绑定的代码在其中一个.h文件中放置了一个非常重要的密钥: #define xAppKey @"REPLACE_WITH_YOUR_APP_KEY" 然后在整个ObjC代码中重用该值。我怀疑在绑定过程中,该值没有执行。基于其他一些线程,至少看起来是这样。我的问题是否可能是其他问题,或者是否有可能在包装的代码中不遵守此值 很抱歉,如果我的objective-c术语不适用,我对此一无所知 编辑 我只是想澄清什么可能不明显。通过“绑定”,我指的是将它作为本机库绑定到monotouch。如果已经很

我试图绑定的代码在其中一个.h文件中放置了一个非常重要的密钥:

#define xAppKey @"REPLACE_WITH_YOUR_APP_KEY"
然后在整个ObjC代码中重用该值。我怀疑在绑定过程中,该值没有执行。基于其他一些线程,至少看起来是这样。我的问题是否可能是其他问题,或者是否有可能在包装的代码中不遵守此值

很抱歉,如果我的objective-c术语不适用,我对此一无所知

编辑


我只是想澄清什么可能不明显。通过“绑定”,我指的是将它作为本机库绑定到monotouch。如果已经很清楚了,请继续…

xAppKey是一个宏。它将完全不受约束。相反地。在预编译时,它将被替换为
@“用你的应用程序键替换”,然后编译,就像这个字符串一直重复一样

正是出于这个原因,一些专家建议用常量字符串替换它们。这些专家可能是对的。但是,我喜欢#定义

正是出于这个原因,您不应该在#define语句中添加任何注释

#define xAppKey @"REPLACE_WITH_YOUR_APP_KEY" // This is the application key
这样的事情几乎肯定会导致编译时错误,这可能很难理解。 例如:

NSLog (@"%@", xAppKey); 
这在没有注释的情况下可以正常工作,因为它将转换为:

NSLog (@"%@", @"REPLACE_WITH_YOUR_APP_KEY"); 
但随着评论的发表,它将转换为:

NSLog (@"%@", @"REPLACE_WITH_YOUR_APP_KEY" // This is the application key);

那是不可能的

xAppKey是一个宏。它将完全不受约束。相反地。在预编译时,它将被替换为
@“用你的应用程序键替换”,然后编译,就像这个字符串一直重复一样

正是出于这个原因,一些专家建议用常量字符串替换它们。这些专家可能是对的。但是,我喜欢#定义

正是出于这个原因,您不应该在#define语句中添加任何注释

#define xAppKey @"REPLACE_WITH_YOUR_APP_KEY" // This is the application key
这样的事情几乎肯定会导致编译时错误,这可能很难理解。 例如:

NSLog (@"%@", xAppKey); 
这在没有注释的情况下可以正常工作,因为它将转换为:

NSLog (@"%@", @"REPLACE_WITH_YOUR_APP_KEY"); 
但随着评论的发表,它将转换为:

NSLog (@"%@", @"REPLACE_WITH_YOUR_APP_KEY" // This is the application key);

那是不可能的

在Obj-C
.h
中定义一个
#define
的目的是允许它被利用库的应用程序所取代。在这种情况下,您的(Obj-C)库可能仅作为源分发

但是您需要为它创建(Xamarin.iOS)绑定。因此,您需要编译此库,编译将一次性修复
xApiKey
的值


您的目标可能是通过Xamarin.iOS向消费应用程序公开此
xApiKey
。您必须修改
Obj-C
库以使用属性而不是常量,然后通过
Xamarin.iOS
绑定(静态)属性访问器。在Obj-C
.h
中定义
的目的是允许使用库的应用程序替换它。在这种情况下,您的(Obj-C)库可能仅作为源分发

但是您需要为它创建(Xamarin.iOS)绑定。因此,您需要编译此库,编译将一次性修复
xApiKey
的值


您的目标可能是通过Xamarin.iOS向消费应用程序公开此
xApiKey
。您必须修改
Obj-C
库以使用属性而不是常量,然后通过
Xamarin.iOS

绑定(静态)属性访问器。我会尝试使用类似
public const String AppKey=“MY_APP_KEY”的东西,因为绑定首先编译代码,这会使宏消失。我在c#中编写的代码中的任何地方都不必使用xAppKey,但它在绑定的ObjC代码中使用。我遇到的全部问题是:我会尝试使用类似于
公共常量字符串AppKey=“MY_APP#KEY”的东西,因为绑定首先编译代码,这会使宏消失。我在c#中编写的代码中的任何地方都不必使用xAppKey,但它在绑定的ObjC代码中使用。我遇到的全部问题是:你知道这与绑定到monotouch有什么关系吗?听起来应该没问题,因为当我创建.a时,它应该会替换您所指的宏?关于注释的事情:注释不会出现在任何C99兼容编译器的宏扩展中(这意味着您在GCC和Clang中都是安全的)。好吧,我将在前几天尝试使用注释。就在什么地方读吧@斯佳丽大人,你当然是对的。宏在链接时不能绑定到任何外部对象。@HermannKlecker但如果所有事情都发生在objc编译代码的内部,我应该确定吗?我很抱歉在这里缺乏知识,我主要是试图缩小我的问题可能的根源。如果我知道这不是问题,我可以继续挖掘其他可能性。@Scarlet勋爵:知识的缺乏是我们来这里的原因。Exellent在这方面也是如此。坦白地说,我对monotouch不太了解。AFAIK会创建二进制文件,然后需要将其链接到iPhone项目,反之亦然。但该接口是在*.o(或任何)二进制对象级别上。在这个二进制文件中,您将发现(许多)
REPLACE\u-WITH\u-YOUR\u-APP\u-KEY
字符串,但没有命名为
xAppKey
。根据您在代码中的位置,Richards建议
AppKey
可能在链接时可见。但我对monotouch的了解还不够好,无法提供更多细节。你知道这与monotouch的绑定有什么关系吗?这听起来应该没问题,因为当我创建.a时,它应该执行您所指的宏替换?关于注释的事情:注释不会出现在任何C99兼容编译器的宏扩展中(这意味着您在GCC和Clang中都是安全的)