我遇到了一些问题,试图将一些特定于iOS5的库整合到一个针对iOS5和iOS4.3的应用中。我已经完成了以下步骤:
通过在“链接二进制文件库”中将其设置为可选项来弱化链接Twitter框架
将其作为其他链接器标志中的iOS5.0 SDK的框架添加到`-framework Twitter.framework'
有条件地将类框架中的框架链接起来:
#if defined(__IPHONE_5_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_5_0
#import <Twitter/Twitter.h>
#import <Accounts/Accounts.h>
#endif
然后在方法本身,我正在检查用户是否为Twitter设置:
if ([TWTweetComposeViewController class]) {
self.canTweet = [TWTweetComposeViewController canSendTweet];
}
这在5.0和4.3模拟器上都能很好地工作。但是,我在运行或存档实际设备方面遇到了问题。
当我有一个运行5.0的3GS或者附加的4运行5.0时,两者都会在Scheme下拉列表中出现两次。选择最上面的一个,并尝试构建或运行项目失败,并显示Use of unidentified identifier 'TWTweetComposeViewController'
错误。
使用第二个设备条目,构建失败并显示ld: framework not found Twitter.framework
错误。
我确信这里有一些我不知道的东西,但我很难过。有人可以建议吗?
答案 0 :(得分:3)
如果您使用的是一周链接,则必须先检查API的首次使用情况 NSClassFromString,respondsToSelector,instancesRespondToSelector等。 所以,改变你的if条件。首先尝试使用上面指定的运行时函数来获取类对象 这是一个链接,详细解释了如何做到这一点。 link
答案 1 :(得分:2)
用于呈现Twitter控制器的代码
在此之前,您必须将框架添加为可选项,并在iOS为最小iOS 5时在h文件中导入
Class TWTweetComposeViewControllerClass = NSClassFromString(@"TWTweetComposeViewController");
if (TWTweetComposeViewControllerClass != nil) {
if([TWTweetComposeViewControllerClass respondsToSelector:@selector(canSendTweet)]) {
UIViewController *twitterViewController = [[TWTweetComposeViewControllerClass alloc] init];
[twitterViewController performSelector:@selector(setInitialText:)
withObject:NSLocalizedString(@"TwitterMessage", @"")];
[twitterViewController performSelector:@selector(addURL:)
withObject:url];
[twitterViewController performSelector:@selector(addImage:)
withObject:[UIImage imageNamed:@"yourImage.png"]];
[self.navigationController presentModalViewController:twitterViewController animated:YES];
[twitterViewController release];
}
}
答案 2 :(得分:0)
进一步挖掘编译器抛出的错误表明它忽略了弱链接标志。虽然我不知道如何或为什么,但它是通过重新安装XCode来解决的。
答案 3 :(得分:-2)
如果链接到4.2或更高版本并部署到3.1或更高版本,则可以使用新的弱链接功能来简化此检查。
你必须将Twitter框架添加为可选,然后
Class TWTweetComposeViewControllerClass = NSClassFromString(@"TWTweetComposeViewController");
if (TWTweetComposeViewControllerClass != nil)
{
if([TWTweetComposeViewControllerClass respondsToSelector:@selector(canSendTweet)])
{
UIViewController *twitterViewController = [[TWTweetComposeViewControllerClass alloc] init];
[twitterViewController performSelector:@selector(setInitialText:)
withObject:NSLocalizedString(@"TwitterMessage", @"")];
[twitterViewController performSelector:@selector(addURL:)
withObject:url];
[twitterViewController performSelector:@selector(addImage:)
withObject:[UIImage imageNamed:@"yourImage.png"]];
[self.navigationController presentModalViewController:twitterViewController animated:YES];
[twitterViewController release];
}
}