在静态库(facebook ios sdk)中使用协议定义时出现协议不完整警告
我正在尝试将facebook ios SDK集成到使用ARC的项目中。正如中所建议的,建议将facebook SDK构建为此类集成的静态库。我运行提供的脚本来构建静态库,然后通过以下方式添加到我的项目中:在静态库(facebook ios sdk)中使用协议定义时出现协议不完整警告,ios,facebook,automatic-ref-counting,static-libraries,Ios,Facebook,Automatic Ref Counting,Static Libraries,我正在尝试将facebook ios SDK集成到使用ARC的项目中。正如中所建议的,建议将facebook SDK构建为此类集成的静态库。我运行提供的脚本来构建静态库,然后通过以下方式添加到我的项目中: 直接拖动输出目录库的所有内容: lib\facebook ios sdk(包含lib和相关头) 在我的目标项目的linkbinarieswithlibraries/buildphases部分中,我明确地添加了静态库 我有一个类正在实现FBSessionDelegate的所有方法。但是,对于
Semantic Issue
Method in protocol not implemented
Required for direct or indirect protocol 'FBSessionDelegate'
有关方法包括:
- (void)fbDidLogin;
- (void)fbDidNotLogin:(BOOL)cancelled;
- (void)fbDidExtendToken:(NSString*)accessToken
expiresAt:(NSDate*)expiresAt;
- (void)fbDidLogout;
- (void)fbSessionInvalidated;
我真的不明白为什么编译器会给我这些警告:-\n有人知道我们为什么会有这样的行为吗?我看到他们将整个facebook ios sdk添加到项目中,但理想情况下我只想添加lib,而不是完整的项目
如有任何澄清/帮助,将不胜感激
[编辑]
我提到的问题可以很容易地通过简单地跟随本页的教程来测试与facbook上的应用程序的连接来重现。在下文中,我已经实现了fDidLogin方法,但仍然有一个关于此方法的警告
我的头文件如下所示:
#import <UIKit/UIKit.h>
#import "FBConnect.h"
@class SCLViewController;
@interface SCLAppDelegate : UIResponder <UIApplicationDelegate, FBSessionDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) SCLViewController *viewController;
@property (strong, nonatomic) Facebook *facebook;
@end
在代码中,您指定接口正在实现FBsesionDelegate协议,但实际上您尚未通过创建协议方法回调为其创建任何实现。如果不需要它们,只需删除实现声明或添加空方法即可。在任何情况下,这些警告都不会影响编译或在代码中产生任何问题,除非您确实需要一些会话回调。带上完整的facebook ios sdk时也会遇到同样的问题…我已经实现了fbDidLogin方法,但我没有实现此协议的其他方法,这一事实甚至会导致一些警告FBD登录。我通过简单地添加空方法来解决警告。谢谢
#import "SCLAppDelegate.h"
#import "SCLViewController.h"
@implementation SCLAppDelegate
@synthesize window = _window;
@synthesize viewController = _viewController;
@synthesize facebook = _facebook;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
_facebook = [[Facebook alloc] initWithAppId:@"MY-APP-ID" andDelegate:self];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"]
&& [defaults objectForKey:@"FBExpirationDateKey"]) {
_facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
_facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}
if (![_facebook isSessionValid]) {
[_facebook authorize:nil];
}
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[SCLViewController alloc] initWithNibName:@"SCLViewController" bundle:nil];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [_facebook handleOpenURL:url];
}
- (void)fbDidLogin {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[_facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[_facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
}
@end