Създавам iOS обвързвания за библиотеката Quickblox. Quickblox написа класа QBRequest, за да провери за конфигурационни параметри (идентификационен номер на акаунт и т.н.) в статичния метод „initialize“. Библиотеката хвърля изключение, ако конфигурационните параметри не са зададени.
Изглежда, че 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
В моя хост проект аз задавам необходимата конфигурация, преди да използвам класа QBRequest:
//Configure QuickBlox
QuickBlox.QBApplication.Shared.ApplicationID = QUICKBLOX_APP_ID;
QuickBlox.QBConnection.RegisterServiceKey (QUICKBLOX_AUTHORIZATION);
QuickBlox.QBConnection.RegisterServiceSecret (QUICKBLOX_SECRET);
QuickBlox.QBSettings.SetAccountKey (QUICKBLOX_ACCOUNT_KEY);
Има ли начин да се изпречи monotouch и да се зададат тези конфигурационни данни, преди да се опита да създаде класа QBRequest?