进入后台、复制新文本并返回应用程序后如何从 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? [复制]

UINavigationController 从后台返回后失去对视图的跟踪

在tmux中如何复制文本并粘贴到某处?