簡體   English   中英

帶有委托引用的ARC項目無法編譯

[英]ARC project with delegate reference fails compiling

我在iOS項目中實施Facebook SDK時遇到問題,我懷疑這是怪罪的:

[facebook authorize:permissions delegate:self];

當我嘗試在我的ARC項目中運行它時,它將不會保留委托:自身。 相反,它說有一個“ ARC錯誤:'Facebook'沒有可見的@interface聲明選擇器'authorize:delegate:'”

我可以這樣編譯:

[facebook authorize:permissions];

但我認為Facebook和該應用程序無法正常通信。 我可以登錄,但是一旦重定向回我的應用程序,該應用程序將不會注冊它已登錄,並且無法執行其任何共享功能。

我認為我需要將該頁面保持為啟用ARC,因此將標志設置為-fno-objc-arc不會解決此問題。

有什么想法嗎?


跟進4/5/12:

我能夠成功實現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");
}

設置完這些之后,我確保按照Facebook教程的說明將應用程序ID添加到plist中,並且一切都能按預期進行。

我知道BOOL登錄值還沒有任何影響。

我目前與此代碼有關的問題是5.1之前的兼容性問題。

它可以在我的5.1測試設備和模擬器中很好地工作,但是如果我轉到5.0或更低版本,則在登錄步驟之后沒有任何作用。 知道為什么會這樣嗎? 我能夠輸入我的登錄數據,然后返回到應用程序,但是沒有顯示更多選項。

感謝您到目前為止的所有反饋。 很想聽聽您對這個項目的想法。

我能夠成功實現Facebook……但是僅在應用程序中使用了彈出登錄方法。 詳細信息已添加為我的原始帖子的編輯內容。

ARC文檔(或者是視頻?)提到了這一點。 編譯器對未聲明的方法變得更加嚴格。 通常,添加適當的頭文件應該可以解決該問題,但是我對Facebook API並不熟悉,因此無法確定。

您使用的SDK版本沒有authorize:delegate:方法嗎? 也許您需要這樣做:

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

您是否需要維護對facebook對象的強烈引用? 似乎它並沒有維持其代表身份。

使用Facebook Graph API,應該可以解決您的問題

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

要么

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代表

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM