Как я могу улучшить свой код TWTweetComposeViewController в iOS?

Я реализовал следующий код, чтобы сделать Twitter Share. В своем коде я пытаюсь протестировать iOS 5, и если это не сработает, я возвращаюсь к старому способу обмена с использованием кода Twitter ShareKit.

Я показал код коллеге, и он предположил, что мой код может иметь недостатки и что мне нужно сделать две вещи:

  1. Сделать правильную проверку времени выполнения?? (так как это может произойти сбой на IOS 4 и более ранних версиях) ДАЖЕ, хотя это не так.
  2. Слабая ссылка на фреймворк Twitter

Может кто-нибудь любезно объяснить, какой будет правильная проверка во время выполнения? и почему слабая ссылка?

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

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");
    }
}

3 ответа

Слабое звено просто означает, что фреймворк не обязательно должен быть на устройстве. Или, другими словами, когда вы добавляете фреймворки в свой проект, приложению потребуется, чтобы фреймворк был на устройстве. Так что, если вам требуется наличие фреймворка, а это не так, тогда приложение рухнет. В вашем случае вы захотите использовать слабую ссылку на среду Twitter, если хотите, чтобы приложение работало на версии iOS до iOS 5 (то есть iOS 4.x).

Надлежащая проверка во время выполнения означает, что вы должны загрузить приложение на свое устройство (под управлением iOS 5 или более поздней версии) и протестировать функцию Twitter своего приложения. Если он выходит из строя, значит, у вас есть проблема.

Я просмотрел ваш код, и все выглядит хорошо. Я не запускал его через компилятор, поэтому не могу говорить о синтаксических ошибках и тому подобном. Единственное изменение, которое я бы сделал:

if ([TWTweetComposeViewController canSendTweet])

в

 Class twClass = NSClassFromString(@"TWTweetComposeViewController");
 if (!twClass) // Framework not available, older iOS
    return;

Причина, по которой я это использую, заключается в том, что буквально проверяет, есть ли фреймворк на этом устройстве, а canSendTweet проверяет, вошел ли пользователь в систему. Поэтому я не хочу путать пользователя, который не вошел в систему, с пользователем, устройство которого не поддерживает Twitter с iOS 5.

Дай мне знать, если тебе понадобится помощь.

https://github.com/doubleencore/DETweetComposeViewController является еще одним вариантом. Это совместимо с iOS 4 тоже.

Я думаю, что вы также пропускаете контроллер (как и большинство примеров кода, которые я видел).

С другой стороны, вы обратили внимание на документацию о обработчике завершения и правильно убедились, что пользовательский интерфейс работает в основном потоке. Мне нужно исправить мою реализацию, чтобы сделать то же самое.

Другие вопросы по тегам