Iphone 如何改进iOS中的TWTweetComposeViewController代码?

Iphone 如何改进iOS中的TWTweetComposeViewController代码?,iphone,objective-c,ios,sharekit,Iphone,Objective C,Ios,Sharekit,我已经实现了以下代码来进行Twitter共享。在我的代码中,我尝试测试iOS5,如果这不起作用,我会回到使用ShareKit的Twitter代码进行共享的老方法 我向一位同事展示了代码,他建议我的代码可能有缺陷,我需要做两件事: 执行正确的运行时检查??(因为它可能会在IOS 4或更早版本上崩溃),即使它没有 Twitter框架的弱链接 有人能解释一下什么是正确的运行时检查吗?为什么是薄弱环节 NSString *text = [NSString stringWithFormat:@"@Awes

我已经实现了以下代码来进行Twitter共享。在我的代码中,我尝试测试iOS5,如果这不起作用,我会回到使用ShareKit的Twitter代码进行共享的老方法

我向一位同事展示了代码,他建议我的代码可能有缺陷,我需要做两件事:

  • 执行正确的运行时检查??(因为它可能会在IOS 4或更早版本上崩溃),即使它没有
  • Twitter框架的弱链接
  • 有人能解释一下什么是正确的运行时检查吗?为什么是薄弱环节

    NSString *text = [NSString stringWithFormat:@"@Awesome chart: %@", self.titleLabel.text];
    


    弱链接仅仅意味着不需要在设备上安装框架。或者换句话说,当你向项目中添加框架时,应用程序将要求该框架在设备上。因此,如果你需要一个框架,但它没有,那么应用程序就会崩溃。在您的情况下,如果希望应用程序在iOS 5之前的iOS版本(即iOS 4.x)上运行,您可能希望弱链接twitter框架

    正确的运行时检查意味着您应该将应用程序加载到您的设备上(运行iOS 5或更高版本),并测试应用程序的twitter功能。如果它崩溃了,那么你就知道你有问题了

    我浏览了你的代码,一切看起来都很好。我没有通过我的编译器运行它,所以我不能说语法错误等等。我要做的一个改变是:

    if([tweetcomposeviewcontroller cansendteet])

    我之所以使用它,是因为它会检查框架是否在该设备上,而
    canSendTweet
    会检查用户是否登录。所以我不想把没有登录的用户和设备不支持iOS5的Twitter的用户混淆


    如果您还需要帮助,请告诉我。

    是另一种选择。它也与iOS 4兼容。

    我认为您还泄漏了控制器(正如我看到的大多数代码示例一样)

    另一方面,您注意了有关完成处理程序的文档,并正确地确保在主线程中执行UI工作。我需要去修复我的实现来做同样的事情

    if ([TWTweetComposeViewController canSendTweet]) 
    {
    
        TWTweetComposeViewController *tweetComposeViewController = [[TWTweetComposeViewController alloc] init];
        [tweetComposeViewController setInitialText:text];
        [tweetComposeViewController addImage:image];
        [tweetComposeViewController setCompletionHandler:^(TWTweetComposeViewControllerResult result){
    
            dispatch_async(dispatch_get_main_queue(), ^{
                [self dismissModalViewControllerAnimated:YES];
                if (result == TWTweetComposeViewControllerResultDone)
                {
                    NSLog(@"iOS 5 onwards Twitter share complete");
                }
            });
        }];
    
        [self presentViewController:tweetComposeViewController
                           animated:YES
                         completion:^{ }];
    }
    else
    {
        SHKItem *item = [SHKItem image:image title:text];
    
        // Share the message.
        [SHKTwitter shareItem:item];
        NSLog(@"Device does not support Twitter library");
        }
    }
    
     Class twClass = NSClassFromString(@"TWTweetComposeViewController");
     if (!twClass) // Framework not available, older iOS
        return;