2013-11-04 8 views
8

Ich versuche, einen Artikeltitel und eine Artikel-URL zu twittern und dann den Namen der App an das Ende des Tweets anzuhängen. So etwas wieWarum kann ich nicht mit SLComposeViewController auf Twitter posten?

angebracht URL

„Wie ein Kaktus (via @appname) wachsen“ Ich habe Schwierigkeiten, herauszufinden, wie die Länge des Titels und die URL zum Ausgleich, um sicherzustellen, dass der Tweet 140 Zeichen nicht überschreitet. Wenn die URL wirklich lang ist, schneiden Sie einen Teil des Artikeltitels aus, so dass er unter 140 Zeichen stehen kann.

bei Twitter's guidelines for SLComposeViewController Blick sie erklären, diesen Teil:

Beachten Sie, dass die Verfahren für die Einstellung Anfangsgehalt mit Boolesche Werte reagieren; Dadurch können Sie als Entwickler sich keine Gedanken über die aktuelle Anzahl der Zeichen im Tweet-Text machen, den Sie initialisieren. Wenn die Methode JA zurückgibt, war genug Platz, um den Inhalt hinzuzufügen. Wenn die Methode NEIN zurückgibt, würde der Inhalt, den Sie hinzufügen wollten, zu einem Tweet führen, der länger als 140 Zeichen ist. Die Logik für die Zeichenzählung berücksichtigt auch die aktuelle Anzahl an Zeichen, die für das URL-Wrapping von t.co benötigt werden.

(. Aus dem "Code Beispiel")

Da schrieb ich den folgenden Code einen Tweet zu bauen und die URL-Länge und Artikellänge ausgleichen:

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]; 
} 

die im Grunde Fügt die URL hinzu und konstruiert den Rest des Tweets, indem sie die Methode setInitialText: durchläuft, bis sie YES zurückgibt und die Länge des Titels jedes Mal um 1 verringert, wenn sie NO zurückgibt, um näher an die erforderliche Länge zu kommen.

Aber es gibt nie wieder JA! Auch wenn ich es weiß sollte. Ich habe einen Artikel verwendet, der möglicherweise 140 Zeichen überschreiten könnte, da der Titel 105 Zeichen lang ist und die URL 55 plus App-Gutschrift ist. Es sollte also theoretisch möglich sein, den Titel zu verkürzen und dann gut hinzuzufügen, aber das passiert nie.

Also, was ist los? Wie führe ich den Link-Anhang mit SLComposeViewController?

+0

Ich lief Ihr Beispielprojekt im Simulator und auf einem iPhone 5S und bekam 0% CPU von Xcode in beiden Fällen gemeldet (während die Animation lief). Vielleicht müssen Sie etwas neu starten (Xcode, Gerät, ext.)? –

+0

Es erscheint ein Fehler: http://openradar.appspot.com/14273967 –

Antwort

2

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

Es gibt eine! im Zustand fehlt, so kürzen Sie die Post, wenn es passt, nicht wenn es zu lang ist;)

+0

Das funktioniert auch nicht. –

+0

Bitte überprüfen Sie, dass weder 'twitterViewController' noch 'titleToShare' vor der Schleife Null ist. – imihaly

+0

Es erscheint ein Fehler: http://openradar.appspot.com/14273967 –

1

Das Problem mit diesem Ansatz ist, dass es nur auf iOS6 funktioniert.

ergibt unterschiedliche Ergebnisse auf iOS6 (NO) und iOS7 (YES). Die Antwort auf dieses Verhalten kommt aus der Dokumentation von 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; 

Wahrscheinlich lohnt sich entweder mit unterschiedlichen Ansätzen auf iOS6 und 7 oder die Länge überprüfen, ohne SLComposeViewController Methode.

0

Wie imihaly gesagt, haben Sie ein "!" Vermisst.

Und 140 Zeichen zählen ist die Grenze des Titels nur, URL nicht miteingeschlossen. So Ihr Titel ist 105 Zeichen lang, die weniger als 140 ist, sollte diese Methode YES zurückgeben.

0

Es gibt einen offen Fehler mit Verbindungslängen nicht richtig (Radar: // 10.469.407) berechnet zu werden. Dies könnte zusammenhängen. Sie könnten versuchen, einen Tweet mit einem Link darin zu senden, um zu prüfen, welcher URL-Kürzler verwendet wird (ich stelle mir vor, dass es t.co verwendet, aber ich könnte falsch liegen).