Предупреждение о неполных протоколах при использовании определения протокола в статической библиотеке (facebook-ios-sdk) - PullRequest
2 голосов
/ 20 марта 2012

Я пытаюсь интегрировать SDK facebook ios в мой проект, использующий ARC. Как указано в документации разработчика Facebook , рекомендуется создавать SDK facebook в качестве статической библиотеки для этого типа интеграции. Я запускаю предоставленный скрипт для сборки статической библиотеки и затем добавляю в свой проект:

  1. , перетаскивая все содержимое выходного каталога lib: lib \ facebook-ios-sdk (который содержит lib и связанные заголовки)

  2. в разделе Link Binaries с библиотеками / фазами сборки моего целевого проекта я явно добавил статическую библиотеку

У меня есть класс, который реализует все методы FBSessionDelegate. Однако у меня есть несколько предупреждений для каждого метода этого делегата, которые не рассматриваются как реализованные в compilo:

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;

Я действительно не понимаю, почему компилятор дает мне эти предупреждения: - \ У кого-нибудь есть идея, почему у нас такое поведение? Я видел в этом блоге , что они добавляют весь facebook-ios-sdk к проекту, но в идеале я просто хочу добавить lib, а не весь проект.

Любые разъяснения / помощь будет принята с благодарностью!

[EDIT] Проблема, которую я упоминаю, может быть легко воспроизведена, просто следуя рубрике на этой странице, чтобы проверить соединение с приложением по факсу здесь . Далее я реализовал метод 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

и .m:

#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

1 Ответ

3 голосов
/ 20 марта 2012

в своем коде вы указываете, что ваш интерфейс реализует протокол FBsesionDelegate, но вы фактически не создали для него никакой реализации, создав обратные вызовы метода протокола.если они вам не нужны, просто удалите декларацию реализации или добавьте пустые методы.в любом случае эти предупреждения не повлияют на компиляцию и не создадут каких-либо проблем в вашем коде, кроме случаев, когда вам действительно нужны некоторые обратные вызовы сеанса.

...