2012-09-20 13 views
20

... Ben iOS6 için çalışıyor twitter paylaşımı kodlarının parçasının bir parça var ama çok iOS5 için güzel geri düşmesine uygulama gerekiriOS6 - Sosyal Çerçeve - SLComposeViewController iOS5 için TWTweetComposeViewController'a nasıl geri dönüş yapar?

Bu şuna benzer: SO

- (void) shareOnTwitter 
{ 
    if([SLComposeViewController instanceMethodForSelector:@selector(isAvailableForServiceType)] != nil) 
    { 
     if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) 
     { 
      NSLog(@"twitter available"); 
      SLComposeViewController *composeViewController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; 
      [composeViewController setInitialText:self.sharingText]; 
      [self.sharingController presentViewController:composeViewController animated:YES completion:nil]; 
     } 
     else 
     { 
      NSLog(@"twitter not available!"); 
     } 
    } 
    else 
    { 
     // SLComposeViewController not available, this is most likely <iOS6, what to do here? 
    } 
} 

, iOS5'te güzel bir şekilde nasıl geri dönebilirim (I TWTweetComposeViewController'a ihtiyacım var), böylece iOS5'te yerel twitter'i kullanabilirim? > Yüklü twitter uygulaması - -> Web url iOS6 yerli tweet:

DÜZENLEME: Sonunda Ben bu yüzden sadece bu dizide son çare olarak karar hala TWTweetComposeViewController çare için tembelim.

+(BOOL)isSocialFrameworkAvailable 
{ 
    // whether the iOS6 Social framework is available? 
    return NSClassFromString(@"SLComposeViewController") != nil; 
} 

- (void) shareOnTwitterWithText:(NSString*)text andURL:(NSString*)url andImageName:(NSString*)imageName 
{ 
    // prepare the message to be shared 
    NSString *combineMessage = [NSString stringWithFormat:@"%@ %@", text, url]; 
    NSString *escapedMessage = [combineMessage stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; 
    NSString *appURL = [NSString stringWithFormat:@"twitter://post?message=%@", escapedMessage]; 

    if([SocialManager isSocialFrameworkAvailable] && [SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) 
    { 
     // user has setup the iOS6 twitter account 

     SLComposeViewController *composeViewController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; 
     [composeViewController setInitialText:text]; 
     if([UIImage imageNamed:imageName]) 
     { 
      [composeViewController addImage:[UIImage imageNamed:imageName]]; 
     } 
     if(url) 
     { 
      [composeViewController addURL:[NSURL URLWithString:url]]; 
     } 
     [self.sharingController presentViewController:composeViewController animated:YES completion:nil]; 
    } 
    else 
    { 
     // else, we have to fallback to app or browser 
     if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:appURL]]) 
     { 
      // twitter app available! 
      [[UIApplication sharedApplication] openURL:[NSURL URLWithString:appURL]]; 
     } 
     else 
     { 
      // worse come to worse, open twitter page in browser 
      NSString *web = [NSString stringWithFormat:@"https://twitter.com/intent/tweet?text=%@", escapedMessage]; 
      [[UIApplication sharedApplication] openURL:[NSURL URLWithString:web]]; 
     } 
    } 
} 

cevap

21

Zayıfsın bağlantıya Heyecan ve Sosyal çerçeveler gerekir ve bir çerçeve olup olmadığını kodunuzda kontrol edin: Bu araya getirdiğim fonksiyonudur, birilerinin yardımcı olur. Zayıf bağlama böyle yapılır: Bu çalıştırmak istiyorsanız XCode projenizde

  • tıklayın
  • emin Social.framework Opsiyonel olarak ayarlanmış olduğundan emin olun Kütüphaneleri ile, ardından Bağlantı İkili, sizin Hedef seçmek Aşama kurmak iOS 5.x üzerinde uygulama veya önceki
  • emin Twitter.framework olun iOS 4.x bu çalıştırmak istiyorsanız Opsiyonel olarak ayarlanmış veya daha önceki
  • hangi çerçeveler belirlemek için basit sınıf fonksiyonlarını oluşturmak ister

mevcut. Böyle Yani görünebilir şey:

+(BOOL)isTwitterAvailable { 
    return NSClassFromString(@"TWTweetComposeViewController") != nil; 
} 

+(BOOL)isSocialAvailable { 
    return NSClassFromString(@"SLComposeViewController") != nil; 
} 

Sizin "tweet" kod şöyle görünebilir:

if ([SomeClass isSocialAvailable]) { 
    // code to tweet with SLComposeViewController 
} else if ([SomeClass isTwitterAvailable]) { 
    // code to tweet with TWTweetComposeViewController 
} else { 
    // Twitter not available, or open a url like https://twitter.com/intent/tweet?text=tweet%20text 
} 
+0

teşekkürler chris! Cevabınız bana en son Xcode sürümümde mevcut olmayan Twitter çerçevesini eklemem gerektiğini onayladı. Bunu almam gerekiyor ... teşekkürler! – mkto

+0

@chris iOS6'da TWTweetComposeViewController'ı kullanabilir veya iOS6'da SLComposeViewController kullanmanın faydaları nelerdir? –

+0

Bir avantaj olup olmadığını bilmiyorum ve ben 'SLComposeViewController' sadece 'TWTweetComposeViewController'' sarar bahse girmeye hazırım. Ayrıca, Apple'ın “SLComposeViewController” lehine “TWTweetComposeViewController” uygulamasını sonlandıracağını hayal edebiliyorum. – chris

7

değil bu çalışma zamanı işlemleri ne kadar pahalı olur, ama olmadığı için bunu bir zarar Uygulama çalışırken bu durumun sıfır olma şansı:


+ (BOOL)isTwitterAvailable 
{ 
    static BOOL available; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     available = NSClassFromString(@"TWTweetComposeViewController") != nil;   
    }); 
    return available; 
} 
+ (BOOL)isSocialAvailable 
{ 
    static BOOL available; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     available = NSClassFromString(@"SLComposeViewController") != nil;   
    }); 
    return available; 
} 
+4

Neden -1 ?? Bir iPhone 4S üzerinde 1000x her iki kontrol de üzerinde döngü, teklif ettiğim yöntem ile 0.000816 sn gibi bir şey ve diğer yöntemle 0.011595 sn. Kimse buna bir ton diyorsa bilmiyorum, ancak uygulamanız çalışırken değişmeyecekken neden dersi çözmeyi sürdürüyorsunuz? Sonucu bir kez saklamak çok kolay olduğunda, aynı şeyi çözmek için kötü bir form gibi görünüyor. – jpswain

İlgili konular