Я пытаюсь получить доступ к самому последнему элементу в UIPasteboard
, в частности, проблема, с которой я сталкиваюсь, заключается в том, что, когда я создаю фоновый рисунок приложения, копирую другой фрагмент текста и возвращаюсь в приложение, я вижу UIPasteboard.general.string
вернуть ноль. Теперь я прочитал, что причина, по которой он возвращает ноль, когда я возвращаюсь к приложению, заключается в том, что это новая мера безопасности, реализованная Apple, но есть ли надежный способ обойти это поведение?
Я видел несколько приложений, которые позволяют пользователю копировать и вставлять столько, сколько они хотят, независимо от того, являются ли они фоном приложения или нет, поэтому я знаю, что это можно сделать, но я не могу ничего найти в интернете.
Вот пример кода, который я использую, который печатает ноль:
@objc func pasteText() {
print("Here's the string: \(UIPasteboard.general.string)")
if let pasteboardText = UIPasteboard.general.string {
self.searchBar.text = pasteboardText
}
}
После копирования нового текста и возврата в приложение, когда я нажимаю кнопку вставки, консоль показывает Вот строка: nil . Я не делаю ничего особенного, просто получаю доступ к строке прямо из UIPasteboard.
Доступ к буферу обмена довольно прост, поэтому я не думаю, что делаю это неправильно. Я думаю, может быть, мне нужно написать какой-нибудь код в AppDelegate
, чтобы получить недавно скопированный текст после возвращения в приложение из фона? Это жизнеспособный подход?
Любое руководство будет с благодарностью.
Функция вставки работает только после того, как я скопирую некоторый текст за пределы приложения, нажмите кнопку режима сна и затем вернитесь обратно в приложение, только тогда самый последний элемент в UIPasteboard обновится правильно и будет работать как обычно. Не совсем уверен, почему мое приложение имеет такое поведение.
Исправлена моя проблема:
Похоже, ни у кого больше не было проблем с доступом к тексту с UIPasteboard, но в моем случае я решил эту проблему. Мне кажется, что UIPasteboard.general.string
был установлен равным нулю вскоре после возвращения в приложение, но в моем appdelegate метод жизненного цикла applicationWillEnterForeground похоже, что после возвращения в приложение правильно, скопированный текст кратко поддерживается. Простым решением, которое я придумал, была установка UIPasteboard.general.string
на себя, код ниже объясняет все это:
if let recentlyCopiedText = UIPasteboard.general.string {
UIPasteboard.general.string = recentlyCopiedText
}
Когда я ссылаюсь на UIPasteboard.general.string
позже, он вставляет правильное значение. Надеюсь, это поможет кому-то, если у него возникнут проблемы с чтением с UIPasteboard.