Facebook SDK 3.0 HelloFacebookSample构建错误

时间:2012-09-10 21:03:53

标签: ios facebook-ios-sdk

我在编译Facebook SDK 3.0附带的HelloFacebookSample应用时遇到了问题。

首先,我应该说我使用的是Xcode 4.0.2,iOS SDK 4.3和OS X 10.6.8。 (我很难找到一种方法来下载Xcode 4.2而不升级到Lion或Mountain Lion,我不愿意这样做。)

当我尝试构建示例项目时,出现以下构建错误:

1)程序中出现意外的“@”

int main(int argc, char *argv[])
{
    @autoreleasepool {    // error on this line
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([HFAppDelegate class]));
    }
}

2)预期标识符

- (BOOL)application:(UIApplication *)application 
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
    // attempt to extract a token from the url
    return [FBSession.activeSession handleOpenURL:url];    // error on this line
}

- (void)applicationWillTerminate:(UIApplication *)application {
    // FBSample logic
    // if the app is going away, we close the session object
    [FBSession.activeSession close];                       // error on this line
}

我可以“解决”这些问题(不确定我是否正确解决了这些问题),但随后我又收到以下链接错误:

  

未找到框架帐户

     

命令/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang失败,退出代码为1

任何人都可以帮助我吗?如果我甚至无法构建示例项目,我将无法将Facebook整合到我的应用程序中!

2 个答案:

答案 0 :(得分:1)

我解决了所有问题。看来样本不能立即与iOS 4.3或Xcode 4.0.2兼容。这是我做的:

1)程序中意外的@;改为:

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [NSAutoreleasePool new];
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([HFAppDelegate class]));
}

2)预期的标识符;取代

    return [FBSession.activeSession handleOpenURL:url];    // error on this line
...
    [FBSession.activeSession close];                       // error on this line

    return [[FBSession activeSession] handleOpenURL:url];
...
    [[FBSession activeSession] close];

3)未找到框架账户;事实证明它不是必需的,所以我只是从Project Navigator中的Frameworks组中删除了框架。

4)我忘了在原帖中说:关键字strong未知,所以我将其宏视为文件顶部的retain FacebookSDK / FacebookSDK.h < / strong>如下:

#define strong retain

现在HelloFacebookSample应用程序编译时没有错误或警告,并且工作正常。与Facebook的所有互动都有效。

希望这有助于将来的其他人!如果有帮助,请将其投票!

答案 1 :(得分:0)

我不是专家,但我会尽我所能。

第一个错误是因为你使用@autoreleasepool。我认为这是自动发布池的一种全新语法。 之前是这样的:

NSAutoreleasePool *pool;
pool = [[NSAutoreleasePool alloc] init];
NSString *string;
string = [[[NSString alloc] init] autorelease]; // NSString or any other allocated objects
                                                // With autorelease tag
/* use the string */
[pool drain];

您应该查看X-code 4.0.2和iOS SDK的项目,以了解主要功能的用途。

我正在查看其他错误,我认为它与您正在使用的iOS SDK有关。是不是只能更新SDK?没有更新xcode?

如果我找到了什么,我会告诉你的。