gpt4 book ai didi

objective-c - 具有委托(delegate)引用的 ARC 项目编译失败

转载 作者:行者123 更新时间:2023-11-28 17:35:53 25 4
gpt4 key购买 nike

我在 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……但只使用应用程序中的弹出登录方法。这是我实现它的方法(仅 FB 方面显示):

我的应用委托(delegate) header :

#import "FBConnect.h"

@interface AppDelegate : UIResponder <UIApplicationDelegate>{

Facebook *facebook;

}

@property (nonatomic, strong) Facebook *facebook;

@end

应用委托(delegate)方法,包括:

////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;

在 View Controller 的方法上:

@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 或更低版本,则在登录步骤后不会执行任何操作。知道为什么会这样吗?我能够输入我的登录数据,然后返回到应用程序,但没有显示更多选项。

感谢您到目前为止的所有反馈。也很想听听您对此项目的看法。

最佳答案

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

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

关于objective-c - 具有委托(delegate)引用的 ARC 项目编译失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9843851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com