2013-11-04 76 views
8

我試圖發佈文章標題和文章URL到twitter,然後將該應用的名稱附加到推文的末尾。因此,像爲什麼我無法使用SLComposeViewController發佈到Twitter?

「如何種植仙人掌(通過@appname)」 連接URL

我遇到了麻煩搞清楚如何平衡的標題和URL的長度,以確保推文不超過140個字符。所以如果網址很長,請關閉一些文章標題,以便它可以少於140個字符。

看着Twitter's guidelines for SLComposeViewController他們的狀態這一部分:

注意,設置初始內容的方法與布爾值響應;這使開發人員無需擔心當前正在初始化的Tweet正文中的字符數。如果該方法返回YES,則有足夠的空間來添加內容。如果該方法返回NO,則您嘗試添加的內容會導致Tweet超過140個字符。字符統計的邏輯也實現了t.co URL換行所需的當前字符數。

(從「代碼示例」部分)

鑑於這種情況,我寫了下面的代碼來構建一個鳴叫和平衡的URL長度和文章長度:

if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) { 
    SLComposeViewController *twitterViewController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; 
    [twitterViewController addURL:[NSURL URLWithString:self.article.url]]; 

    NSString *titleToShare = self.article.title; 
    while ([twitterViewController setInitialText:[NSString stringWithFormat:@"%@ (via @SyllableApp)", titleToShare]]) { 
     titleToShare = [titleToShare substringToIndex:titleToShare.length - 1]; 
    } 

    [self presentViewController:twitterViewController animated:YES completion:nil]; 
} 

這基本上添加URL,然後通過循環遍歷setInitialText:方法構造推文的其餘部分,直到它返回YES,每次返回NO時將標題的長度減1,以便接近所需的長度。

但它永遠不會返回YES!即使當我知道它應該。我使用了一篇可能超過140個字符的文章,因爲標題長度爲105個字符,URL爲55,加上應用功勞。所以它理論上應該能縮短標題,然後加上它,但它從來沒有發生過。

那麼這是怎麼回事?如何完成與SLComposeViewController的鏈接附件?

+0

我在模擬器和iPhone 5S上運行了您的示例項目,並且在兩種情況下(即動畫運行時)都獲得了由Xcode報告的0%的CPU。也許你需要重新啓動一些東西(Xcode,device,ext。)? –

+0

出現它是一個錯誤:http://openradar.appspot.com/14273967 –

回答

2

while ([twitterViewController setInitialText:[NSString stringWithFormat:@"%@ (via @SyllableApp)", titleToShare]]) => while (![twitterViewController setInitialText:[NSString stringWithFormat:@"%@ (via @SyllableApp)", titleToShare]])

有一個!缺少條件,所以你縮短帖子時適合,而不是當它太長;)

+0

這也行不通。 –

+0

請檢查在循環之前'twitterViewController'和'titleToShare'是否都是零。 – imihaly

+0

出現這是一個小故障:http://openradar.appspot.com/14273967 –

1

這種方法的問題是,它只適用於iOS6。

SLComposeViewController *social = [[SLComposeViewController alloc] init]; 
NSString *stringToShare = @""; 
for (int i = 0; i < 150; i++) 
{ 
    stringToShare = [stringToShare stringByAppendingString:@"x"]; 
} 
NSLog(@"%@",[social setInitialText:stringToShare][email protected]"YES":@"NO"); 

在iOS6(NO)和iOS7(YES)上產生不同的結果。這個問題的答案行爲來自SLComposeViewController

// Sets the initial text to be posted. Returns NO if the sheet has already been 
// presented to the user. On iOS 6.x, this returns NO if the specified text 
// will not fit within the character space currently available; on iOS 7.0 and 
// later, you may supply text with a length greater than the service supports, 
// and the sheet will allow the user to edit it accordingly. 
- (BOOL)setInitialText:(NSString *)text; 

的文檔可能是值得或者具有上iOS6的和圖7不同的方法,或者檢查長度,而無需使用SLComposeViewController方法。

0

正如imihaly所說,你錯過了一個「!」。

140個字符數只是標題的限制,不包括URL.So您的標題長度小於140個字符,因此此方法應返回YES。

0

有一個開放的錯誤與鏈路長度沒有得到正確(雷達:// 10469407)計算。這可能是相關的。您可以嘗試發送帶有鏈接的Tweet,以檢查使用哪個URL縮短器(我想它是使用t.co,但我可能是錯的)。

相關問題