2017-09-15 2 views
3

Ich versuchte herauszufinden, warum UIActivityViewController eine leicht konvertierte Zeichenfolge für Mail und WeChat gesendet.Sieht aus wie Apple Strings in UIActivityViewController falsch konvertiert

Dies ist mein Code:

let activityViewController = UIActivityViewController(activityItems: ["http://preprodgo.travelstart.com/search-on-index?version=3&timestamp=2017-09-15_10-31-27-031"], applicationActivities: nil) 

self.present(activityViewController, animated: true, completion: nil) 

Und wenn per Mail geteilt, es wurde gezeigt, wie:

http://preprodgo.travelstart.com/search-on-index?version=3×tamp=2017-09-15_10-31-27-031 

Das System Version ist 10.3.3.

+0

Wie lautet Ihre Systemkonfiguration? Ich kann es auf iOS 11 GM mit Mail-App, aber nicht kopieren und Nachrichten reproduzieren. –

Antwort

2

Gelöst von Sonderfall geben, wenn in mail und Wechat teilen html

@objc class TSActivityProvider: NSObject, UIActivityItemSource { 
    func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any? { 
     //... 
     if activityType == .mail || activityType == .postToWeibo { 
      message = message.xmlSimpleEscape() 
     } 
     return message 
    } 
} 


// https://stackoverflow.com/questions/803676/encode-nsstring-for-xml-html 
extension String 
{ 
    func xmlSimpleEscape() -> String 
    { 
     let mapList : SimpleToFromRepalceList = [ 
      ("&", "&"), 
      ("\"", """), 
      ("'", "'"), 
      (">", ">"), 
      ("<", "&lt;")] 

     return self.simpleReplace(mapList: mapList) 
    } 
} 

Art der Arbeit um zu entkommen. Ich denke, Apple sollte vorgeschlagen, Analysemethode in UIActivityType und automatisches Escaping beim Empfangen in Zeichenfolge bereitstellen.

8

&times; ist ein HTML4 entity und es wird sich in einer E-Mail an einen × Symbol konvertieren, wenn Sie es als Klartext teilen.

Konvertieren Sie die Zeichenfolge in eine URL statt:

if let url = URL(string: "http://preprodgo.travelstart.com/search-on-index?version=3&timestamp=2017-09-15_10-31-27-031") { 
    let activityViewController = UIActivityViewController(activityItems: [url], applicationActivities: nil) 
    present(activityViewController, animated: true) 
} 
+0

Danke! diese Und was wollte ich eigentlich teilen: '' ' message = String (Format: NSLocalizedString ("share_text_search_result_multi_city" Kommentar:„Hey, \ nI fand große Flüge auf Flapp von% 1 $ @ von nur% 2 $ @% 3 $ d. \ NSchauen Sie sie aus! \ N \ n% 4 $ @ "), String (Beschreibung: outboundAirportCityName), cheapestPriceCurrencyText, cheapestPrice, link) ' '' Jede Idee zur Vermeidung der Konvertierung, wenn ich habe um es als Klartext zu teilen? – allenlinli

+0

Fügen Sie das STRTING und die URL als zwei separate Aktivitätselemente hinzu. Auf diese Weise wird die URL nicht konvertiert. – the4kman

+0

funktioniert nicht. Es ist noch konvertiert. – allenlinli

0

können Sie versuchen,

vat urlString = "http://preprodgo.travelstart.com/search-on-index?version=3&timestamp=2017-09-15_10-31-27-031" 
urlString = urlString.StringByReplacingOccurencOf(string:"&", with:"&amp") 
let activityViewController = UIActivityViewController(activityItems: [urlString], applicationActivities: nil) 
self.present(activityViewController, animated: true, completion: nil) 

Im Anschluss können Sie auch mit ihm HTML-Name eine beliebige URL Sonderzeichen ersetzen.

Verwandte Themen