0

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

首先,我应该说我使用的是 Xcode 4.0.2、iOS SDK 4.3 和 OS X 10.6.8。(我正在努力寻找一种在不升级到 Lion 或 Mountain Lion 的情况下下载 Xcode 4.2 的方法,我不愿意这样做。)

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

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 集成到我的应用程序中!

4

2 回答 2

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未知,所以我将其宏定义为文件FacebookSDK/FacebookSDK.hretain的顶部,如下所示:

#define strong retain

现在 HelloFacebookSample 应用程序编译时没有错误或警告,并且运行良好。与 Facebook 的所有互动都有效。

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

于 2012-09-11T19:42:10.443 回答
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?

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

于 2012-09-10T23:09:46.830 回答