我的应用支持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
}
对于Twitter来说同样如此。但iOS 6 Simulator工作正常,但iOS 5模拟器出错。在iOS 5和iOS 6上添加facebook和twitter共享的任何帮助或教程。
EXC_BAD_ACCESS (code=2, address=0x0) isAvailableForServiceType:SLServiceTypeFacebook
isAvailableForServiceType:SLServiceTypeTwitter
更新项目以获得答案1后,请转错。
这是前缀文件
答案 0 :(得分:4)
Social
框架(SLComposeViewController
)仅在iOS 6中引入。在iOS 5中,与任何社交网络的唯一本机连接是Twitter和TWTweetComposeViewController
类。 iOS 6引入了Social
框架,预先存在Twitter支持以及新的Facebook和新浪微博集成。
因此,在iOS 5上,您实际上无法对SLComposeViewController
进行任何引用或调用,您将需要使用条件来查看用户设备正在运行的版本(iOS 5或6),然后进行任何操作/条件。
代码if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook])
用于查看用户是否在“设置”应用程序中设置了Facebook帐户。
是的,所以你为iOS 5兼容性添加了Twitter
框架,请确保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.");
}
答案 1 :(得分:4)
EXC_BAD_ACCESS (code=2, address=0x0)
所以这个错误是一个“分段错误”,因为社交框架是一个仅限iOS6的框架。由于你使用了弱链接(这就是将框架添加为“可选”的意思),SLComposeViewController
类是Nil
(即它实际指向无效的内存地址0x0
),所以任何您尝试调用它的函数很可能会导致分段错误(因为无法取消引用此地址)。
您需要做的是检查此类是否为有效指针:
if (NSClassFromString(@"SLComposeViewController") != Nil) {
// iOS 6
} else {
// iOS 5, Social.framework unavailable, use Twitter.framework instead
}