Binding Monotouch/Xamarin绑定:需要在Monotouch创建类之前设置配置参数

Binding Monotouch/Xamarin绑定:需要在Monotouch创建类之前设置配置参数,binding,xamarin.ios,xamarin,quickblox,Binding,Xamarin.ios,Xamarin,Quickblox,我正在为Quickblox库创建iOS绑定。Quickblox编写QBRequest类来检查静态“initialize”方法中的配置参数(帐户id等)。如果未设置配置参数,库将引发异常 在我有机会设置配置数据之前,monotouch实际上创建了所有类。因此,异常未被捕获,应用程序崩溃 在monotouch创建QBRequest类之前,我需要以某种方式调用其他类上的方法。此外,我的项目在模拟器中运行良好。这只发生在设备上。也许我缺少一个链接器或编译器标志 以下是来自Quickblox的日志消息和堆

我正在为Quickblox库创建iOS绑定。Quickblox编写QBRequest类来检查静态“initialize”方法中的配置参数(帐户id等)。如果未设置配置参数,库将引发异常

在我有机会设置配置数据之前,monotouch实际上创建了所有类。因此,异常未被捕获,应用程序崩溃

在monotouch创建QBRequest类之前,我需要以某种方式调用其他类上的方法。此外,我的项目在模拟器中运行良好。这只发生在设备上。也许我缺少一个链接器或编译器标志

以下是来自Quickblox的日志消息和堆栈跟踪:

Sep 30 10:31:30 FamilyMeiOS[3929] <Error>: *** Terminating app due to uncaught exception         'BaseServiceException', reason: 'You have missed setup credentials.
    Please insert following code inside your application 
    [QBApplication sharedApplication].applicationId = applicationID;
    [QBConnection registerServiceKey:authorizationKey];
    [QBConnection registerServiceSecret:authorizationSecret];
    Before any other code, that uses our service.'

Last Exception Backtrace:
0   CoreFoundation                  0x2e3a4ec6 __exceptionPreprocess + 126
1   libobjc.A.dylib                 0x38b3fce2 objc_exception_throw + 34
2   FamilyMeiOS                     0x000d0c62 __23+[QBRequest initialize]_block_invoke (QBRequest.m:42)
3   libdispatch.dylib               0x3902996a dispatch_once_f + 42
4   FamilyMeiOS                     0x000d09e2 +[QBRequest initialize] (QBRequest.m:40)
5   libobjc.A.dylib                 0x38b40554 _class_initialize + 568
6   libobjc.A.dylib                 0x38b44a0a lookUpImpOrForward + 126
7   libobjc.A.dylib                 0x38b4497e _class_lookupMethodAndLoadCache3 + 30
8   libobjc.A.dylib                 0x38b498b4 _objc_msgSend_uncached + 20
9   FamilyMeiOS                     0x02004bba monotouch_create_classes (registrar.m:33672)
10  FamilyMeiOS                     0x02004f5c monotouch_setup (main.armv7.m:82)
11  FamilyMeiOS                     0x0211a278 monotouch_main (monotouch-main.m:225)
12  FamilyMeiOS                     0x02005008 main (main.armv7.m:96)
13  libdyld.dylib                   0x3903dab2 tlv_initializer + 2

在monotouch尝试创建QBRequest类之前,是否有办法在monotouch前面设置此配置数据?

在异常发生之前,无法运行任何托管代码

但是,您可以运行本机(C/Objective-C)代码,尤其是库初始值设定项:

__attribute__((constructor))
static void initialize_quickblox ()
{    
    [QBApplication sharedApplication].applicationId = applicationID;
    [QBConnection registerServiceKey:authorizationKey];
    [QBConnection registerServiceSecret:authorizationSecret];
}

因此,您必须使用此函数创建自己的本机库,并与之链接(最简单的方法可能是将其作为第二个本机库添加到绑定库中)。

。。。我的问题是这篇文章的后续部分,其中@poupou最有帮助。在这篇文章中,我列出了实际的绑定代码:谢谢!你是我希望能回答的专家。我需要在编译时在宿主项目中使用不同的Quickblox帐户支持多种配置(开发、登台、生产)。我猜我可以用“getenv”(“QUICKBLOX\u APP\u ID”)来实现这一点。看起来我可以在Xamarin Studio中设置环境变量:是的,您可以在Xamarin Studio中设置环境变量。
__attribute__((constructor))
static void initialize_quickblox ()
{    
    [QBApplication sharedApplication].applicationId = applicationID;
    [QBConnection registerServiceKey:authorizationKey];
    [QBConnection registerServiceSecret:authorizationSecret];
}