Как я могу улучшить свой код TWTweetComposeViewController в iOS?
Я реализовал следующий код, чтобы сделать Twitter Share. В своем коде я пытаюсь протестировать iOS 5, и если это не сработает, я возвращаюсь к старому способу обмена с использованием кода Twitter ShareKit.
Я показал код коллеге, и он предположил, что мой код может иметь недостатки и что мне нужно сделать две вещи:
- Сделать правильную проверку времени выполнения?? (так как это может произойти сбой на IOS 4 и более ранних версиях) ДАЖЕ, хотя это не так.
- Слабая ссылка на фреймворк 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 тоже.
Я думаю, что вы также пропускаете контроллер (как и большинство примеров кода, которые я видел).
С другой стороны, вы обратили внимание на документацию о обработчике завершения и правильно убедились, что пользовательский интерфейс работает в основном потоке. Мне нужно исправить мою реализацию, чтобы сделать то же самое.