0

我的应用支持 iOS 5+。现在我想添加 facebook 和 twitter。我添加了 social.framework 作为可选,并在 facebook btn 我检查

if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
        NSLog(@"Facebook iOS 6 avaliable");
}
else
{
 NSLog(@"Feature not supported"); // for iOS 5 users
}

推特也一样。但 iOS 6 模拟器工作正常,但 iOS 5 模拟器给出错误。在 iOS 5 和 iOS 6 上添加 facebook 和 twitter 共享的任何帮助或教程。

EXC_BAD_ACCESS (code=2, address=0x0) isAvailableForServiceType:SLServiceTypeFacebook
isAvailableForServiceType:SLServiceTypeTwitter

为答案 1 更新项目后,出现此错误。

在此处输入图像描述 这是前缀文件 在此处输入图像描述

4

2 回答 2

4

Social框架 ( ) 仅在 iOS 6 中引入。SLComposeViewController在 iOS 5 中,与任何社交网络的唯一本地连接是 Twitter 和TWTweetComposeViewController类。iOS 6 引入了Social具有预先存在的 Twitter 支持和新的 Facebook 和新浪微博集成的框架。

因此,在 iOS 5 上,您实际上无法对 进行任何引用或调用SLComposeViewController,您需要使用条件来查看用户设备正在运行哪个版本(iOS 5 或 6),然后进行任何操作/条件。

该代码if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook])用于查看用户是否在设置应用程序中设置了 Facebook 帐户。

是的,所以你添加了TwitteriOS 5 兼容性的框架,顺便确保Social框架设置为可选。

要检查设备正在运行的版本,请将其添加到您的MyApp-Prefix.pch文件中:

#define SYSTEM_VERSION_EQUAL_TO(v)         ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
#define SYSTEM_VERSION_GREATER_THAN(v)       ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN(v)         ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)   ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)

然后你可以在任何类中使用它,因为前缀文件会自动导入所有类:

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"5.0") && SYSTEM_VERSION_LESS_THAN(@"6.0")) {

       NSLog(@"This is called when device is running iOS 5, 5.0.1, 5.1 etc.");
}
else if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) {

       NSLog(@"iOS 6.0, 6.0.1, 6.0.2, 6.1 etc.");
}
于 2013-01-19T14:52:23.660 回答
4
EXC_BAD_ACCESS (code=2, address=0x0)

所以这个错误是一个“分段错误”,因为 Social 框架是一个 iOS6-only 框架。由于您使用了弱链接(这就是将框架添加为“可选”的意思),SLComposeViewController该类是Nil(即它实际上指向无效的内存地址0x0),因此您尝试调用它的任何函数很可能会导致分段错误(因为无法取消引用此地址)。

你需要做的是检查这个类是一个有效的指针:

if (NSClassFromString(@"SLComposeViewController") != Nil) {
    // iOS 6
} else {
    // iOS 5, Social.framework unavailable, use Twitter.framework instead
}
于 2013-01-19T15:05:01.853 回答