【发布时间】:2012-03-23 17:32:47
【问题描述】:
我在 iOS 项目中实现 Facebook SDK 时遇到问题,我怀疑这应该归咎于:
[facebook authorize:permissions delegate:self];
当我尝试在我的 ARC 项目中运行它时,它不允许 delegate:self 保留。相反,它说有一个“ARC 错误:'Facebook' 没有可见的@interface 声明选择器'authorize:delegate:'”
我可以用这个编译:
[facebook authorize:permissions];
但我认为 Facebook 和应用程序无法通过这样做进行正常通信。我可以登录,但一旦重定向回我的应用程序,应用程序不会注册它已登录并且无法执行任何共享功能。
我认为我需要将该页面维护为启用 ARC,因此将标志设置为 -fno-objc-arc 不会解决此问题。
有什么想法吗?
2012 年 4 月 5 日跟进:
我能够成功实现 Facebook……但只使用了 app 中的弹出式登录方法。这是我实现它的方法(仅显示 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");
}
设置完成后,我确保按照 Facebook 教程所述将应用 ID 添加到 plist 中,并且一切都按预期工作。
我知道 BOOL 登录值尚未影响任何内容。
我目前对这段代码的问题是 5.1 之前的兼容性问题。
它在我的 5.1 测试设备和模拟器中运行良好,但如果我转到 5.0 或更低版本,则在登录步骤之后不会执行任何操作。知道为什么会这样吗?我可以输入我的登录数据,然后返回到应用程序,但不再提供任何选项。
感谢您迄今为止的所有反馈。也很想听听您对这个项目的看法。
【问题讨论】:
标签: objective-c ios xcode facebook automatic-ref-counting