2013-11-04 7 views
8

私は記事のタイトルと記事のURLをtwitterに投稿し、つぶやきの最後にそのアプリの名前を追加しようとしています。だから、SLComposeViewControllerを使用してTwitterに投稿できないのはなぜですか?

のようなものは添付URL「方法(@appname経由)サボテンを成長させる」

私が確認するために、タイトルやURLの長さのバランスを取る方法を考え出すのトラブルを抱えていましたつぶやきが140文字を超えないこと。したがって、URLが本当に長い場合は、記事タイトルの一部を切り捨てて、140文字未満にすることができます。

彼らはこの部分を述べるTwitter's guidelines for SLComposeViewControllerを見る:初期の内容を設定するための方法は、ブール値で応答することを

注意を。これにより、開発者は、初期化しているTweet本体の現在の文字数を気にする必要がなくなります。メソッドがYESを返す場合、コンテンツを追加するのに十分な余地がありました。メソッドがNOを返した場合、追加しようとしたコンテンツは、140文字を超えるTweetになります。文字カウントのロジックは、t.co 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を返すようにURLを追加し、必要な長さに近づくためにNOを返すたびにタイトルの長さを1減らします。

ただし、YESを返すことはありません。私が知っているときでも、それはすべきです。私はタイトルが105文字で、URLが55で、アプリのクレジットがあるので、潜在的に140文字を超える可能性のある記事を1つ使用していました。理論的には、タイトルを短くしてからうまく追加できるはずですが、決してそれは起こりません。

何が起こっているのですか? SLComposeViewControllerとのリンクをどのように達成できますか?

+0

サンプルプロジェクトをシミュレータとiPhone 5Sで実行し、両方のケースで(アニメーションが実行されている間に)Xcodeによって0%のCPUが報告されました。たぶんあなたは何かを再起動する必要があります(Xcode、デバイス、内線)? –

+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'のどちらもnilでないことを確認してください。 – 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)の結果が異なります。この動作に対する答えはおそらく価値のいずれかiOS6および7に異なるアプローチを持っている、またはSLComposeViewControllerメソッドを使用せずに長さをチェックし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; 

のドキュメントから来ています。

0

imihalyが言ったように、あなたは "!"が欠けていました。

140文字のカウントはタイトルのみの制限で、URLは含まれません。タイトルは105文字で140未満です。このメソッドはYESを返します。:リンクをオープンバグがあり

0

はが正しく(// 10469407レーダー)を算出し得ていない長さ。これは関連している可能性があります。どのURL短縮ツールが使用されているかを確認するために、リンクを含むTweetを送信してみてください(t.coを使用していると思いますが、間違っている可能性があります)。

関連する問題