我的GA反射崩溃问题

本文将介绍如何使用Objective-C语言构建iOS应用,包括开发环境设置、基础语法讲解、常见框架使用以及实战案例分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#import <Foundation/Foundation.h>


@interface MYGAI : NSObject


@property (nonatomic,strong) id ga;

- (void)trackEventWithCategory:(NSString *)category

                    withAction:(NSString *)action

                     withLabel:(NSString *)label

                     withValue:(NSNumber *)value;

@end



#import "MYGAI.h"


@implementation MYGAI

- (id)init

{

    self = [super init];

    if (self) {

        Class GAIClass = NSClassFromString(@"GAI");

        id gaInstance = [GAIClass performSelector:@selector(sharedInstance)];

        self.ga = [gaInstance valueForKey:@"defaultTracker"];

    }

    return self;

}


- (void)trackEventWithCategory:(NSString *)category

                    withAction:(NSString *)action

                     withLabel:(NSString *)label

                     withValue:(NSNumber *)value

{

    if (self.ga) {

        Class GAIBuilder = NSClassFromString(@"GAIDictionaryBuilder");

        if (!GAIBuilder) {

            NSLog(@"GA统计失败---------请确保您使用的GAI Lib版本是3.0以上!");

            

            NSException *exception = [NSException exceptionWithName:@"GA统计失败" reason:@"请确保您使用的GAI Lib版本是3.0以上!" userInfo:nil];

            @throw exception;

            

            return;

        }

        SEL createEvent = NSSelectorFromString(@"createEventWithCategory:action:label:value:");

        

        NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[GAIBuilder methodSignatureForSelector:createEvent]];

        [inv setSelector:createEvent];

        [inv setTarget:GAIBuilder];

        [inv setArgument:&category atIndex:2];

        [inv setArgument:&action atIndex:3];

        [inv setArgument:&label atIndex:4];

        [inv setArgument:&value atIndex:5];

        [inv invoke];

        

// id gaiBuilder = nil;

        __weak id gaiBuilder = nil;   //这个地方如果不加 __weak 会导致崩溃(我的项目是ARC的)

        [inv getReturnValue:&gaiBuilder];

        

        NSDictionary *dict = [gaiBuilder performSelector:@selector(build)];

        SEL sendAction = NSSelectorFromString(@"send:");

        

        NSInvocation *invView = [NSInvocation invocationWithMethodSignature:[self.ga methodSignatureForSelector:sendAction]];

        [invView setSelector:sendAction];

        [invView setTarget:self.ga];

        [invView setArgument:&dict atIndex:2];

        [invView invoke];

        

        NSLog(@"----GAsdk统计走完--");

    }

    else{

        NSLog(@"---ga为空---gasdk统计失败");

    }

}


@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值