当 self 等于 NSObject 时委托丢失

delegate is lost when self is equal to NSObject

我正在使用 [FBSDKShareAPI shareWithContent:content delegate:self]; 在 facebook 中分享一个 photo 并且自己等于 NSObject 称为 SocialUtils。

我直接去图书馆放日志

NSLog(@"2");
NSLog(@"_sharePhotoContent _delegate intern is!!! %@",_delegate);
FBSDKGraphRequestHandler completionHandler = ^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { //Passing this line the delegate is lost.
NSLog(@"3");
NSLog(@"_sharePhotoContent _delegate intern is!!! %@",_delegate);

这幅画是:

2
_sharePhotoContent _delegate intern is!!! <SocialUtils: 0x7f87f5707580>

3
_sharePhotoContent _delegate intern is!!! (null)

我也试过,但这次 self 等于 UIViewController 并且工作完美,委托仍然存在。

我不明白为什么会这样,我需要有单独的控制器逻辑,否则将意味着在许多 UIViewController 中重复代码。

有没有人能赐教一下,是因为出现这种情况吗?

FBSDKShareAPI中的delegate属性定义为weak。看这里:

https://github.com/facebook/facebook-ios-sdk/blob/master/FBSDKShareKit/FBSDKShareKit/FBSDKSharing.h

您的 SocialUtils 对象可能正在被垃圾回收。是否有任何其他对象对 SocialUtils 具有强引用?如果没有,您可以这样做:

在 YourAppDelegate 上:

@property (nonatomic, strong) SocialUtils *socialUtils;

无论您在哪里定义 SocialUtils:

SocialUtils *socialUtils = [[SocialUtils alloc] init];

YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.socialUtils = socialUtils;

[socialUtils shareToFacebook:...]
// this method ^ would call [FBSDKShareAPI shareWithContent:content delegate:self];

它不必在 AppDelegate 上。它也可以在你的 ViewController 上,只要在这段时间内没有收集垃圾...