天天看点

友盟第三方登入后,进行分享,成功后退出登录,选择QQ再登录,结果程序就崩溃了!!!

友盟打印的崩溃日志,控制器是进行分享的控制器。

 *** -[HNWatchLivingRoomController isMemberOfClass:]: message sent to deallocated instance 0x1372bfa00

下面是自定义的工具类,封装的一个进行第三方分享的加方法:

+ (void)jhThirdPartyShareWithTitle:(NSString *)title url:(NSString *)url shareText:(NSString *)text inController:(UIViewController <UMSocialUIDelegate> *)vc
 {
     //分享的title
     [UMSocialData defaultData].extConfig.title = title;
     
     //------->  设置分享后,点击跳转的url,不设置,就是AppDelegate.m里面设置的 url
     //Qzone
     [UMSocialData defaultData].extConfig.qzoneData.url = url;
     
     //QQ
     [UMSocialData defaultData].extConfig.qqData.url = url;
     [UMSocialData defaultData].extConfig.qqData.qqMessageType = UMSocialQQMessageTypeDefault;
     
     //微信好友
     [UMSocialData defaultData].extConfig.wechatSessionData.url = url;
     
     //微信朋友圈-只显示图片和标题,不显示内容
     [UMSocialData defaultData].extConfig.wechatTimelineData.url = url;
     
     [UMSocialData defaultData].extConfig.wxMessageType = UMSocialWXMessageTypeText;
     
     [UMSocialSnsService presentSnsIconSheetView:vc
                                          appKey:UMAPPKEY
                                       shareText:text
                                      shareImage:[UIImage imageNamed:@"icon-about"]
                                 shareToSnsNames:@[UMShareToWechatSession,UMShareToWechatTimeline,UMShareToSina,UMShareToQQ,UMShareToQzone]
                                        delegate:vc];
 }      

后来猜想,是delegate设置为vc出现了问题。

把delegate设置为nil时,结果就没有崩溃了。

但是,设置为nil时,分享回调就没有了。

于是,把delegate设置为self(工具类),在工具类里面,定义一个block。

在代理里面,用block进行回调。

代码:

- (void)jhThirdPartyShareWithTitle:(NSString *)title 
                                url:(NSString *)url
                          shareText:(NSString *)text
                       inController:(UIViewController <UMSocialUIDelegate> *)vc
                      callBackBlock:(void (^)())callBlock
 {
    //保存block
    _callBackBlock = callBlock
    
    ......
 }      
#pragma mark UMSocialUIDelegate
 -(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
 {
     //根据`responseCode`得到发送结果,如果分享成功
     if(response.responseCode == UMSResponseCodeSuccess)
     {
         //得到分享到的平台名
         DLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
     
         //分享成功
         if (_callBackBlock){
             _callBackBlock();
         }
     
     }
 }