簡體   English   中英

為什么我無法使用SLComposeViewController發布到Twitter?

[英]Why am I unable to post to Twitter using SLComposeViewController?

我試圖在Twitter上發布文章標題和文章URL,然后將應用程序的名稱附加到推文的末尾。 所以像

附加URL “如何種植仙人掌(通過@appname)”

我在弄清楚如何平衡標題和URL的長度以確保推文不超過140個字符時遇到了麻煩。 因此,如果URL真的很長,請剪掉一些文章標題,以使其少於140個字符。

看一下Twitter的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完成鏈接附件?

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

有一個! 缺少狀態,因此您可以在適合的情況下縮短帖子,而不是在時間過長時;)

這種方法的問題在於它僅適用於iOS6。

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

在iOS6(否)和iOS7(是)上產生不同的結果。 此行為的答案來自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方法的情況下檢查長度。

正如imihaly所說,您確實錯過了“!”。

並且140個字符的數量僅是標題的限制,不包括URL。因此,您的標題長度為105個字符,少於140個,此方法應返回YES。

有一個打開的錯誤,鏈接長度未正確計算(radar:// 10469407) 這可能是相關的。 您可以嘗試發送帶有鏈接的推文,以檢查正在使用哪個URL縮短器(我想它正在使用t.co,但我可能錯了)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM