我正在尝试将文章标题和文章网址发布到Twitter,然后将应用程序的名称附加到推文的末尾。像
这样的东西“如何种植仙人掌(通过@appname)”附加网址
我无法弄清楚如何平衡标题和网址的长度,以确保推文不超过140个字符。因此,如果URL非常长,请删除部分文章标题,以便它可以低于140个字符。
看Twitter's guidelines for SLComposeViewController
他们说明了这一部分:
请注意,设置初始内容的方法使用布尔值进行响应;这允许您(开发人员)不必担心正在初始化的推文正文中的当前字符数。如果方法返回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
,每次返回{{1}时将标题长度减少1为了更接近所需的长度。
但它永远不会返回YES! 即使我知道它应该。我正在使用一篇文章,它可能超过140个字符,因为标题长度为105个字符,URL为55,加上应用信用额度。所以它理论上应该能够缩短标题,然后加上它,但它永远不会发生。
那是怎么回事?如何使用NO
完成链接附件?
答案 0 :(得分:2)
while ([twitterViewController setInitialText:[NSString stringWithFormat:@"%@ (via @SyllableApp)", titleToShare]])
=>
while (![twitterViewController setInitialText:[NSString stringWithFormat:@"%@ (via @SyllableApp)", titleToShare]])
有一个!条件缺失,所以你在适合的时候缩短帖子,而不是在它过长的时候缩短;)
答案 1 :(得分:1)
这种方法的问题在于它仅适用于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(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方法的情况下检查长度。
答案 2 :(得分:0)
正如imihaly所说,你确实错过了一个“!”。
140个字符数只是标题的限制,不包括URL。所以你的标题是105个字符长,小于140,这个方法应该返回YES。
答案 3 :(得分:0)
打开错误,链接长度无法正确计算(radar:// 10469407)。这可能是相关的。您可以尝试发送一个带有链接的推文,以检查正在使用哪个URL缩短器(我想它正在使用t.co,但我可能错了)。