进入后台、复制新文本并返回应用程序后如何从 UIPasteboard 中检索文本?
Posted
技术标签:
【中文标题】进入后台、复制新文本并返回应用程序后如何从 UIPasteboard 中检索文本?【英文标题】:How to retrieve text from UIPasteboard after entering background, copying new text, and returning to the app? 【发布时间】:2019-06-19 02:23:58 【问题描述】:我正在尝试访问UIPasteboard
中的最新项目,具体来说,我面临的问题是,当我在应用程序背景下复制另一段文本并返回应用程序时,我看到了 @ 987654322@ 返回零。现在我读到,当我返回应用程序时它读取 nil 的原因是它是 Apple 实施的一项新的安全措施,但是,有没有可靠的方法来规避这种行为?
我见过一些应用程序允许用户根据需要复制和粘贴,无论他们是否在后台运行应用程序,所以我知道可以这样做,但我似乎找不到任何东西在互联网上。
这是我正在使用的打印 nil 的代码示例:
@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
似乎被设置为 nil,但在我的 appdelegate 生命周期方法 applicationWillEnterForeground 中,它看起来像返回到应用程序正确,复制的文本被简要维护。我想出的简单解决方案是将UIPasteboard.general.string
设置为自身,下面的代码解释了这一切:
if let recentlyCopiedText = UIPasteboard.general.string
UIPasteboard.general.string = recentlyCopiedText
当我稍后引用UIPasteboard.general.string
时,它会粘贴正确的值。如果有人在从 UIPasteboard 阅读时遇到问题,希望这对他们有所帮助。
【问题讨论】:
【参考方案1】:我做了什么.. 我打开我的演示应用程序并进入后台,然后打开 iphone 默认消息应用程序键入一条消息,然后选择全部并复制内容,然后再次回到我的应用程序,我有点击按钮,我只是打印。
print(UIPasteboard.general.string)
它正在成功打印最近复制的内容。 所以请检查这种方式是否有效。
【讨论】:
这个我试过好几次了,还是不行。我的应用使用了 MDM 证书,这可能与它有关【参考方案2】:我正在使用 Swift 4.2。以下是我遵循的步骤:
-
打开的应用程序。
将应用程序发送到后台。
去了野生动物园
复制了网址
使用以下方法在我的应用程序中访问。它正在工作。
让 newStringCopied = UIPasteboard.general.string
重试,希望对您有所帮助。
【讨论】:
以上是关于进入后台、复制新文本并返回应用程序后如何从 UIPasteboard 中检索文本?的主要内容,如果未能解决你的问题,请参考以下文章
所以我刚刚创建了一个文本文件并使用 with 循环从现有文件中复制了文本。如何在同一个 prog 中打开新创建的文件?
如果他进入后台或在不活动几分钟后如何从 android 应用程序中注销用户
当用户按下主页按钮但在应用程序进入后台之前,如何从应用程序窗口的 rootViewController 呈现 viewController? [复制]