Prüfen Sie, ob es ist ein emoji, die in einen string
Ich bin immer der text die Größe einer Zeichenfolge mit diesem
textSize = [[tempDict valueForKeyPath:@"caption.text"] sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:CGSizeMake(280, CGFLOAT_MAX) lineBreakMode: NSLineBreakByWordWrapping];
Das einzige problem das ich habe ist, dass wenn der string enthält nur ein emoji, meine app abstürzt. Gibt es eine einfache Möglichkeit zu prüfen, emojis oder muss ich ein array erstellen mit allen möglichen emojis und dann überprüfen Sie mit, dass?
Fehler:
-[NSNull sizeWithFont:constrainedToSize:lineBreakMode:]: unrecognized selector sent to instance 0x3aa88a60
if ([tempDict valueForKeyPath:@"caption.text"]){
NSLog(@"%@", [tempDict valueForKeyPath:@"caption"]);
//Measure the message label box height
textSize = [[tempDict valueForKeyPath:@"caption.text"] sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:CGSizeMake(280, CGFLOAT_MAX) lineBreakMode: NSLineBreakByWordWrapping];
int height = 320 + 20 + textSize.height;
[cellHeight addObject:[NSNumber numberWithInt:height]];
}
- Was ist der crash? Sie sollten lösen die crash statt Kontrolle für Emojis.
- Der crash ist da, wenn ich rufe sizeWithFont, es gibt keinen text, um die Größe des. Oder hat sizeWithFont funktioniert, wenn nur ein emoji und kein text?
- Bis Sie details über den Absturz (wie die komplette Fehlermeldung und entsprechenden code), es gibt keine Möglichkeit zu wissen.
- Die Fehler ich erhalte, ist -[NSNull sizeWithFont:constrainedToSize:lineBreakMode:]: unrecognized selector geschickt Instanz 0x3aa88a60
- sizeWithFonts sollte arbeitet mit Emojis, weil Emoji ist einige eine Sequenz von Zeichen, Sie können Lesen Sie über es auf wiki.
- tempDict gibt NSNull, weil nicht gefunden Wert für den Pfad "Beschriftung.text"
- Auch seine Arbeit gut, bis ich den post nur mit emojis/kein text. Die 14 bevor es alle gut funktionieren
- Dies ist, was den Absturz verursacht text = "\Ud83d\Ude4c";
- Können Sie fügen Sie einige code? Welcher Wert sollte im Wörterbuch?
- Das hat nichts zu tun mit Emojis. Das hat nichts zu, so dass mit dem Aufruf zu
sizeWithFont:
. Dies ist einfach zu tun hat mitNSNull
zurückgegeben von dervalueForKeyPath:
Anruf statt der erwartetenNSString
. - aber kurz vor dem Absturz passiert, ich log [tempDict valueForKeyPath:@"Titel"] und es gibt eine text-Taste. Es zeigt sich: text = "\Ud83d\Ude4c";
- Teilen Sie den code:
NSString *str = [tempDict valueForKeyPath:@"caption.text"]; textSize = [str sizeWithFont...
. Sie werden feststellen, dassstr
istNSNull
und nicht wirklich eineNSString
in dem Fall geben Sie das problem. - alle Antworten in diesem post sind veraltet und arbeiten nicht mit Apple ' s neue emoji-sets. Ich fordere Sie auf, markieren Sie bitte Ihre Frage als akzeptiert meine Lösung, die funktioniert für alle aktuellen (und im Gegensatz zu den anderen Antworten, alle ZUKÜNFTIGEN) emojis. stackoverflow.com/a/42428051/2057171
Du musst angemeldet sein, um einen Kommentar abzugeben.
versuchen, diesen code:
@Simha.IC Antwort ist toll.
Doch es funktioniert nicht mit dem neuen iOS 9.1 emojis'.
Simha.IC-Ausschnitt ist nicht zu erkennen, diese sind:
???????????????☂️✝️✡️☯️
So das problem zu lösen ich Zwickte ein wenig den code und erstellt eine Kategorie mit:
Meiner Kategorie berechnen können:
Erstellt habe ich ein kleines Projekt mit der Kategorie, als ein Beispiel.
Ich habe auch einen pod mit der Kategorie möchten Sie vielleicht, es zu versuchen.
Dies ist, was ich verwende:
Nahm ich diese das fehlt einigen emoji reicht, und dann diese emoji-array zu finden, fehlt rantes durch iteration... Haben nicht in die Tiefe getestet.
Können Sie diese neuen Rahmenbedingungen
https://github.com/woxtu/NSString-RemoveEmoji
Verwendung:
return (0x1d000 <= codepoint && codepoint <= 0x1f77f);
imisEmoji
Methode mitreturn (0x1d000 <= codepoint && codepoint <= 0x1f77f) || (0x1F900 <= codepoint && codepoint <=0x1f9ff);
isIncludingEmoji
ist JA.Dieses Problem kann auftreten, wenn es irgendein Zeichen der Vergangenheit
0x00ff
. In anderen Worten, es gibt viele Unicode-Zeichen neben Emoji, die Sie möglicherweise berücksichtigen müssen. Um zu sehen, ob es irgendwelche Unicode-Zeichen (jenseits der Grenzen des erweiterten ASCII) verwenden Sie den folgenden.ist es zu spät Antworten in diesem, aber es kann jemand helfen.
Bitte, Lesen Sie diese Antwort Wie man NSString Größe, wenn NSString umfasst emojis?
Wenn Sie nur emojis dann sollten Sie nicht verwenden
sizeWithFont
. Verwenden Sie die Bezeichnung dafür oder etwas anderes.NSString funktioniert nicht mit Emojis, nur text. Wenn Sie emojis, dann sollten Sie
[label sizeToFit]
oder[label sizeThatFits:]
Können, können Sie auch diesen code verwenden:
Da, Sie bekommen NSNull aus dem Wörterbuch, aber nicht gleich null, und Ihr Zustand funktioniert.
NSNull
Objekt.Wieder und wieder verwenden die Menschen valueForKeyPath statt objectForKey. Keiner von Ihnen kann immer erklären, warum. Lesen Sie die Dokumentation. Wenn nach dem Lesen können Sie erklären, warum Sie mit valueForKeyPath (und "ich kopiert von irgendwo" ist keine Erklärung), ändern Sie es zu objectForKey.
Das problem, das Sie haben, hat nichts zu tun mit Emojis an alle. Jeder Versuch zu erkennen, Emojis in der Zeichenfolge wird scheitern - aus dem einfachen Grund, dass Sie nicht haben, eine Zeichenfolge in der ersten Ort, den Sie haben [NSNull null]. Das problem könnte behoben werden, indem mit objectForKey - Sie können null-stattdessen verhält sich viel mehr zu vergeben. Oder Sie bekommen noch [NSNull null].
Finden Sie heraus, warum Sie immer [NSNull null]. Jemand stellt es dort. Wenn Sie können nicht verhindern, dass Sie da sind, dann müssen Sie es behandeln.
Nun mit dem neuen release von iOS 10, für die folgenden emojis es funktioniert nicht:
Emojis
Den folgenden code-snippet ist erprobt und getestet, sowohl für iOS 9 und iOS-10:
Erstellen Sie einen String-Erweiterung in der app, wie oben erwähnt.
Und kann z.B. so verwendet werden:
Einfache, Rasche Lösung mit der überprüfung jedes Skalare in unicodeScalars sind im set CharacterSet.Symbole
Aber ich fand einige emoji-1.0-Elemente, wie ℹ️ ist nicht klassifizieren als ein emoji. Also ich erstelle diese checker:
- Und dies ist der checker kann erkennen, welche ℹ️:
Als Sie wahrscheinlich bemerkt haben, alle diese emoji-Erkennung Methoden brechen fast immer Apple fügt neue emojis.
Habe ich einen CG-scanning-Lösung, die funktionieren sollte für alle aktuellen und alle ZUKÜNFTIGEN emojis hier: https://stackoverflow.com/a/14472163/2057171
Meines Wissens ist es die einzige wirkliche Antwort auf dieses Problem gepostet online.
Können Sie es verwenden, etwa so: