- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在 playground 中运行以下命令(我在 Xcode 7.3.1 和 Xcode 8.1 中进行了测试并看到了相同的行为):
import UIKit
let key: String = "some_key"
let value: String = "some_value"
UIPasteboard.general.items = [[key: value]]
let item = UIPasteboard.general.items.first
if let item = UIPasteboard.general.items.first {
switch item[key] {
case let x as String:
print("This is expected")
case let x as Any:
type(of: x)
print("This is unexpected")
default:
print("This is unexpected")
}
} else {
print("This is unexpected")
}
我注意到我放入粘贴板的 String
实际上被桥接回了 NSConcreteMutableData
。
我的问题如下:
这是由内部 UIPasteboard 实现引起的(即从 NSString
显式转换为 NSConcreteMutableData
),还是这是标准的 ObjC-Swift 桥接行为?
如何解决此问题以在 UIPasteboard 中存储自定义键/值对?
为了便于引用,这是在 Playground 上的样子:
最佳答案
您为 item[key]
获得的 Data
只是字符串的 UTF-8 编码值。
如果添加以下 case
,您将看到:
case let x as Data:
let str = String(data: x, encoding: .utf8)
print("str = \(str)")
造成混淆的原因是 items
属性使用的 key 是 UTI,而不是随 secret 钥。如果您将 key 更改为 public.text
,那么您的代码将按预期工作。
通常,您不会使用 items
属性将字符串放在粘贴板上。您将使用 string
属性来读取和写入值。
UIPasteboard.general.string = "Hello"
let aStr = UIPasteboard.general.string
print("aStr = \(aStr)")
这样做避免了指定 UTI 的需要,也避免了替换粘贴板上的所有现有项目。
关于ios - 是什么导致 UIPasteboard 中的项目被转换为 NSConcreteMutableData?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40559111/
我想将图像和文本(两者)复制到 UIPasteBoard。是否可以同时复制文本和图像。 这里我可以仅复制图像或仅复制文本。如何复制两者? 我的复制图像代码如下, UIPasteboard *paste
如何将图像复制到 UIPasteboard? 我只看到过文本示例。 最佳答案 如果你看Apple's Documentation for UIPasteboard ,您看到可以使用 'setImage
我正在开发一个应用程序,其中一个模块是一个简单的列表 TableView,显示音频文件列表。当用户选择任何音频文件时,操作表会附带选项 SMS 之一。我需要通过短信发送特定的音频文件。请让我知道如何处
如果 UIPasteboard 对象设置为“持久”,则 UIPasteboard 的项目似乎存储在数据库或类似的东西中。那么有什么提示可以让我找到数据在系统中的存储位置吗? 越狱。 提前致谢。 最佳答
我有两个应用程序,它们使用各种 UIPasteboard 名称作为彼此共享数据的方案。 粘贴板使用反向 DNS 命名约定,如下所示:com.mycompany.myapp.stuffx, com.my
我正在开发一个应用程序,我必须在其中将照片和文本共享到 Facebook 和 FBMessenger,为此我正在使用 FBSDKShareKit Framework。不能同时分享文字和照片,所以我将文
我在几个 UIPasteboard 对象中看到很多泄漏。直到今天,我才听说过这个类,而且(显然)我自己也没有在程序中使用过。这是一个屏幕截图: 我能做些什么来消除这些泄漏?我是否正确看待这个问题? 最
是否可以不进入应用直接复制快捷项的值?我想做一些类似于 Apple 的计算器应用程序的事情: 最佳答案 目前这是不可能的,否则用户将无法弄清楚是否发生了什么。 对于计算器应用程序,当您点击复制结果时,
我有一个字符串要放入 UIPasteboard 中,它应该在 2 分钟后过期 UIPasteboard.general.setObjects(objects: [NSItemProviderWriti
应用特定的 UIPasteboard 的内容物理存储在设备上的什么地方? 这是 iTunes 备份设备时备份的东西吗? 那么,就安全性而言,是否需要对发送到 UIPasteboard 的数据进行加密?
我正在尝试创建特定于应用程序的 UIPasteboard,但在弄清楚如何注册它时遇到了一些问题: UIPasteboard *pasteboard = [UIPasteboard pasteboard
假设在 UIPasteBoard 上复制了 3 个字符串: UIPasteboard.generalPasteboard().string="hello" UIPasteboard.generalPa
是否可以使用命名的 UIPasteboard(即不是全局的)在两个应用程序之间传输数据? 应用程序彼此完全独立,因此具有来自不同供应商的不同包 ID 我想使用命名粘贴板,这样用户自己在全局粘贴板中的内
我已成功使用以下代码将图像复制或添加到粘贴板: if (ver_float < 6.0) { UIPasteboard *pasteboard; pasteboard = [UIPas
UIPasteboard 线程安全吗? 我正在尝试做这样的事情 dispatch_async(dispatch_get_global_queue(0, 0), ^{ UIPasteboard
我已经将多个字符串放入 UIPasteboard,但是在 UITextField 上粘贴时,它只粘贴第一个字符串,任何人都可以告诉我如何粘贴所有其他字符串 我正在处理第一个应用程序并粘贴到其他应用程序
我正在开发一个使用自定义粘贴板来保存信息的应用程序。我尝试将操作系统从 iOS 6 升级到 iOS 6.1.4(通过无线方式)并且一切都很好,但是当升级到 iOS 7 beta 1(使用 iTunes
在这里,我的要求是在将 UIPasteboard 项目粘贴到其他应用程序后将其删除。 我如何将字符串复制到 UIPasteboard 是 UIPasteboard *pb = [UIPasteboar
一种对象,可帮助用户在应用内从一个位置共享数据到另一个位置,以及从您的应用共享数据到其他应用。 这是写在 UIPasteboard 文档开头的语句。但是当我尝试在两个不同的应用程序中使用它来访问其他应
我已经使用剪贴板从UIwebView复制了图像,我想邮寄它。为此,我使用通用粘贴板来获取数据,但是检索数据时出现问题。当我检查粘贴板时当前数据,它说它有Apple Web Archive粘贴板类型数据
我是一名优秀的程序员,十分优秀!