#ios #react-native #blackberry #xcode12 #blackberry-dynamics
Вопрос:
После интеграции Black-Berry в iOS(React-Native) при запуске приложения на симуляторе произошел сбой. Ошибка заключается в :-
Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: 'Delegate property not set. Either call [GDiOS authorize:] and pass an object that
implements the GDiOSDelegate protocol, or set the delegate property of the GDiOS instance prior
to calling [GDiOS authorize].
Используемая ссылка :- https://github.com/blackberry/BlackBerry-Dynamics-React-Native-SDK/blob/master/modules/BlackBerry-Dynamics-for-React-Native-Base/README.md
Снимок экрана с Ошибкой:-
Класс Main.m :-
AppDelegate.h :-
#import <React/RCTBridgeDelegate.h>
#import <UIKit/UIKit.h>
#import <BlackBerryDynamics/GD/GDiOS.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate,GDiOSDelegate>
@property (nonatomic, strong) UIWindow *window;
@end
Комментарии:
1. смогли ли вы решить эту проблему?
2. @y-dolem Я обнаружил , что в нем отсутствует файл делегата iOS, поэтому просто добавьте его в проект, и он будет работать как wow. Добавление этого файла ниже.
Ответ №1:
Через несколько дней я решил эту проблему так. Поэтому публикуйте ответы в надежде, что это может кому-то помочь.
Добавьте файл objCBBGDiOSDelegate.h в проект
@import GD.Runtime;
#import "AppDelegate.h"
@interface objCBBGDiOSDelegate : NSObject <GDiOSDelegate>
@property (weak, nonatomic) UIViewController *rootViewController;
@property (weak, nonatomic) AppDelegate *appDelegate;
@property (assign,nonatomic,readonly) BOOL hasAuthorized;
(instancetype)sharedInstance;
@end
и файл objCBBGDiOSDelegate.m в проекте
#import "objCBBGDiOSDelegate.h"
@interface objCBBGDiOSDelegate ()
@property (nonatomic, assign) BOOL hasAuthorized;
-(instancetype)init;
-(void)didAuthorize;
@end
@implementation objCBBGDiOSDelegate
(instancetype)sharedInstance {
static objCBBGDiOSDelegate *gdiOSDelegate = nil;
static dispatch_once_t onceToken;
dispatch_once(amp;onceToken, ^{
gdiOSDelegate = [[objCBBGDiOSDelegate alloc] init];
});
return gdiOSDelegate;
}
- (instancetype)init {
self = [super init];
if (self) {
// Do any additional setup
}
return self;
}
- (void)setRootViewController {
[self didAuthorize];
}
- (void)setAppDelegate:(AppDelegate *)appDelegate {
_appDelegate = appDelegate;
[self didAuthorize];
}
- (void)didAuthorize {
[self.appDelegate didAuthorize];
}
#pragma mark - BlackBerry Dynamics SDK Delegate Methods
- (void)handleEvent:(GDAppEvent *)anEvent {
/* Called from BlackBerry Dynamics SDK when events occur, such as system startup. */
switch (anEvent.type)
{
case GDAppEventAuthorized:
{
[self onAuthorized:anEvent];
break;
}
case GDAppEventNotAuthorized:
{
[self onNotAuthorized:anEvent];
break;
}
case GDAppEventRemoteSettingsUpdate:
{
//A change to application-related configuration or policy settings.
break;
}
case GDAppEventServicesUpdate:
{
//A change to services-related configuration.
break;
}
case GDAppEventPolicyUpdate:
{
//A change to one or more application-specific policy settings has been received.
break;
}
case GDAppEventEntitlementsUpdate:
{
//A change to the entitlements data has been received.
break;
}
default:
{
NSLog(@"Unhandled Event");
break;
}
}
}
- (void)onNotAuthorized:(GDAppEvent *)anEvent {
/* Handle the BlackBerry Dynamics SDK not authorized event. */
switch (anEvent.code) {
case GDErrorActivationFailed:
case GDErrorProvisioningFailed:
case GDErrorPushConnectionTimeout:
case GDErrorSecurityError:
case GDErrorAppDenied:
case GDErrorAppVersionNotEntitled:
case GDErrorBlocked:
case GDErrorWiped:
case GDErrorRemoteLockout:
case GDErrorPasswordChangeRequired: {
// an condition has occured denying authorization, an application may wish to log these events
NSLog(@"onNotAuthorized %@", anEvent.message);
break;
}
case GDErrorIdleLockout: {
// idle lockout is benign amp; informational
break;
}
default:
NSAssert(false, @"Unhandled not authorized event");
break;
}
}
- (void)onAuthorized:(GDAppEvent *)anEvent {
/* Handle the BlackBerry Dynamics SDK authorized event. */
switch (anEvent.code) {
case GDErrorNone: {
if (!self.hasAuthorized) {
self.hasAuthorized = YES;
[self didAuthorize];
}
break;
}
default:
NSAssert(false, @"Authorized startup with an error");
break;
}
}
@end
И в файле appdelegate.m
#import "objCBBGDiOSDelegate.h"
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary<UIApplicationLaunchOptionsKey,id> *)launchOptions{
[objCBBGDiOSDelegate sharedInstance].appDelegate = self;
[[GDiOS sharedInstance] authorize:[objCBBGDiOSDelegate sharedInstance]];
return YES;
}
- (void)didAuthorize {
NSLog(@"%s", __FUNCTION__);
}
В AppDelegate.h добавьте авторизованный
@import GD.Runtime;
extern UIViewController *rootViewController;
@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate>
@property (nonatomic, strong) UIWindow *window;
// GD methods
- (void)didAuthorize;
@end
Ответ №2:
Вы пытаетесь запустить пример приложения или пытаетесь интегрировать пакет sdk Dynamics в существующий проект?
Я бы рекомендовал запустить одно из примеров приложений, представленных в репозитории.
Кроме того, эта ошибка возникает, когда Dynamics SDK неправильно связан с проектом. Попробуйте удалить базовый модуль и повторно добавить его.
Комментарии:
1. Привет @GGhangura спасибо за ваш комментарий , я попытался перелинковать его, но все равно получил ту же проблему.