3

アプリにTweetsheet共有オプションがあります。iOS8.3にアップデートしたばかりで、次SLComposeViewControllerのものを提示しようとするとエラーがスローされますTweetsheet:

「キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: 'アプリケーションがターゲットに nil モーダル ビュー コントローラーを提示しようとしました」

SLComposeViewController *tweetSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
[tweetSheet setInitialText:@"testing!"];
[self presentViewController:tweetSheet animated:YES completion:nil];

Twitterが利用できるかどうか、事前に確認しています。他の誰かが今この問題を抱えていますか?

4

2 に答える 2

2

SLServiceTypeTwitteriOS 8.3 を実行している iPhone で使用すると、同じ問題が発生します。

[SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter] 

YESへの後続の呼び出しを返します

[SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]

戻りますnil。ただし、アプリを iPad または iPhone シミュレーターで実行している場合、またはサービス タイプを に変更した場合は、View Controller が返されますSLServiceTypeFacebook

今、私はこの回避策を使用しています: Twitter の可用性を確認するには、

+(BOOL)twitterAvailable {
    return([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter] &&
           [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter] != nil);
}

SLComposeViewController を提示する前に、さらにチェックを追加します。

if(composeViewController != nil) {
   [viewController presentViewController:composeViewController animated:YES completion:nil];
}

これは、iOS 8.4 でのバグ修正の将来の証拠となるはずです。

于 2015-04-29T12:01:27.797 に答える
0

サービスのいずれかを使用する前に、オブジェクトにアクセスできるかどうかを常に確認する必要があります。

if( [SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter] ){

これは本当に大事なことなので

  1. アプリがクラッシュしておらず、
  2. サービスが利用できないことをユーザーに伝えることができます。

またはiOSのように、から使用できる他のサービスについても同じことを行う必要があります。SMSMail

if(![MFMessageComposeViewController canSendText]) {

また

if( ![MFMailComposeViewController canSendMail] ){

特定のアプリが電話で利用できることを確認したい場合は、次を使用することもできますcanOpenURL:

- (BOOL)isAppAvailable:(NSString *)appURL{
   return [[UIApplication sharedApplication]  
                canOpenURL:[NSURL URLWithString:appURL]];
}

isAvailableForServiceType:SLServiceTypeTwitter呼び出しは似たようなことを実行していると思います。

于 2015-04-14T14:22:09.957 に答える