当 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 上,只要在这段时间内没有收集垃圾...
我正在使用 [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 上,只要在这段时间内没有收集垃圾...