2012-03-23 38 views
1

我有在iOS的项目实施了Facebook SDK麻烦,我怀疑这条线是难辞其咎:与代表参考ARC项目失败编译

[facebook authorize:permissions delegate:self]; 

当我尝试在我的ARC项目运行,它不会让代表:自我留下。相反,它说,有一个“ARC错误:‘Facebook的’不可见的@interface声明选择‘授权:委托:’”

我可以用这个编译:

[facebook authorize:permissions]; 

但我不认为Facebook和应用程序通过这样做正确沟通。我可以登录,但一旦重定向回到我的应用程序,应用程序不会注册它已登录并且无法执行任何共享功能。

我认为我需要保持该页面为启用ARC,因此将标志设置为-fno-objc-arc不会解决此问题。

有什么想法?


随访12年4月5日:

我是能够成功地实现Facebook的......但只用在应用程序中的弹出登录方法。以下是我提出这一点(只是FB方面显示):

我的应用程序委托头:

#import "FBConnect.h" 

@interface AppDelegate : UIResponder <UIApplicationDelegate>{ 

    Facebook *facebook; 

} 

@property (nonatomic, strong) Facebook *facebook; 

@end 

应用的委托方法,包括:

////FB ELEMENT: IMPORTING VC TO CONNECT WITH FACEBOOK 
#import "ViewController.h" 

////FB ELEMENT 
@synthesize facebook; 

///////FB ELEMENTS 
// THIS METHOD SUPPORTS IOS PRE 4.2 
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{ 

    NSLog(@"handleOpenURL called."); 

    return [facebook handleOpenURL:url]; 

} 

// THIS METHOD SUPPORTS IOS AFTER 4.2 
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{ 

NSLog(@"openURL called."); 

return [facebook handleOpenURL:url]; 
} 

然后,我想大部分的Facebook活动在页面上调用它。下面是标头:

#import "FBConnect.h" 

@interface ViewController : UIViewController <FBSessionDelegate, FBDialogDelegate> 

//FB ELEMENTS 
Facebook *facebook; 
BOOL login; 

//////SHARE PROPERTIES FOR PHOTO DISPLAY LAYER 
@property (nonatomic, strong) Facebook *facebook; 

而关于视图控制器的方法,包括:

@synthesize facebook; 

//////////////////////////////////////////// 

-(void)postWall{ 

    NSLog(@"postWall called."); 

    //CREATING MORE ACCESSIBLE VARIABLE 
    NSString *photoTitle = [photoTitles objectAtIndex:pt]; 


    //ESTABLISHES DESCRIPTION CONTENT 
    NSDictionary *itemDescriptionPre = [photoDescriptions objectAtIndex:pt]; 
    NSString *itemDescription = [itemDescriptionPre objectForKey:@"_content"]; 

    NSMutableDictionary *paramsSet = 
    [NSMutableDictionary dictionaryWithObjectsAndKeys: 

    //CLICKABLE LINK COMPONENT (STORY TITLE WORKS WELL HERE) 
    photoTitle, @"name", 

    //STORY DESCRIPTION GOES HERE 
    itemDescription, @"description", 

    //STORY LINK GOES HERE 
    [flickrURLLink objectAtIndex:pt], @"link", 

    //PHOTO TO CONNECT WITH POST 
    [photoURLsLargeImage objectAtIndex:pt], @"picture", 
    nil]; 

    [[self facebook] dialog:@"feed" andParams:paramsSet andDelegate:self]; 

} 

- (void) fbDidLogin { 

    facebook = [[Facebook alloc] initWithAppId:@"MY_APP_ID" andDelegate:self]; 

    login = YES; 

    NSLog(@"Logged in with Facebook credentials"); 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"]; 
    [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationKey"]; 
    [defaults synchronize]; 

    [self postWall]; 
} 

- (void)fbDidNotLogin:(BOOL)cancelled{ 
    ///TO COMPLETE 
} 

- (void)fbDidExtendToken:(NSString*)accessToken 
       expiresAt:(NSDate*)expiresAt{ 
    ////TO COMPLETE 
} 


- (void)fbDidLogout{ 

    login = NO; 
    NSLog(@"Logged out with Facebook credentials"); 
} 

- (void)fbSessionInvalidated{ 

    login = NO; 

    NSLog(@"Logged out with Facebook credentials"); 
} 

设置那些,我确信后我添加应用程序ID到plist中由实教程和所有描述按预期工作。

我知道BOOL登录值不会影响任何东西。

我目前的问题与此代码是5.1之前的兼容性问题。

它在我的5.1测试设备和模拟器中效果很好,但如果我使用5.0或更低版本,在登录步骤后不会执行任何操作。任何想法为什么会是这样?我可以输入我的登录数据,然后返回到应用程序,但没有提供更多选项。

感谢您的反馈。很想听到你对这个项目的想法。

回答

0

我是能够成功地实现Facebook的...但使用只是应用程序中的弹出式登录方法。详细信息作为编辑添加到我原来的帖子中。

0

您使用的是没有authorize:delegate:方法的SDK版本吗?也许你需要这样做:

facebook.delegate = self; 
[facebook authorize:permissions]; 
+0

不幸的是,这也产生了错误:在'Facebook *'类型的对象上未找到属性'委托' – 2012-03-23 18:06:17

0

您是否需要维护对facebook对象的强引用?它似乎并没有保持其作为代表的地位。

+0

我已经在属性声明中将它建立为(非原子的,强壮的),如果这就是你的意思。 – 2012-03-23 18:07:16

+0

快速阅读Facebook iOS SDK并未返回任何授权:委托:方法。我错过了什么? – 2012-03-23 18:20:19

+0

我想我从他们的hackbook例子中提取了它。但现在你提到它...... – 2012-03-23 18:22:21

0

使用Facebook的图形API,应该可以解决你的问题

// get information about the currently logged in user 
[facebook requestWithGraphPath:@"me" andDelegate:self]; 

OR

facebook = [[Facebook alloc] initWithAppId:@"YOUR_APP_ID" andDelegate:self]; 

This instance is used to invoke SSO, as well as the Graph API and Platform Dialogs from within the app. 

您的类必须实现所需的Facebook委托

+0

这也没有解决它。我已经实现(我认为)所有可能的代表 - FBSessionDelegate,FBRequestDelegate,FBDialogDelegate和FBLoginDialogDelegate, – 2012-03-23 18:15:28

+0

@EvanDyson您是否尝试简单地设置用'delegate:self'传入的内容...现在通过利用以下' property(nonatomic,assign)id sessionDelegate;'?意思只是尝试'facebook.setSessionDelegate = self'; ...现在有init方法一次接受委托:' - (id)initWithAppId:(NSString *)appId andDelegate:(id )delegate;' – pulkitsinghal 2012-03-28 01:16:09

0

ARC文档(或者是视频?)提到了这一点。编译器对未声明的方法变得更加严格。通常情况下,添加适当的头文件应该修复它,但我不熟悉Facebook API,所以我无法确定。