- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下代码用于抓取用户从应用外部复制到剪贴板的文本,以便他们可以将其粘贴到应用内:
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
if ([pasteboard hasStrings])
{
NSString *text = pasteboard.string;
}
这一直运行良好,直到 iOS14
我注意到我一直在崩溃,因为 pasteboard.string
是 nil
尽管 hasStrings
为真。
我查看了文档,发现 pasteboard.string
确实有可能是 nil
:
The value stored in this property is an NSString object. Theassociated array of representation types isUIPasteboardTypeListString, which includes type kUTTypeUTF8PlainText.Setting this property replaces all current items in the pasteboardwith the new item. If the first item has no value of the indicatedtype, nil is returned.
我的意思是剪贴板中有某种不是 kUTTypeUTF8PlainText
的字符串,这就是为什么 pasteboard.string
是 nil
, 但这是正确的解释吗?
我只是对这里到底发生了什么感到困惑,并且不确定如果我遇到 pasteboard.string
是 nil
的情况应该告诉我的用户什么?
最佳答案
-[UIPasteboard hasStrings] == YES
仅表示粘贴板中的项目具有 public.utf8-plain-text
类型或任何其他表明它是字符串的类型.
但是 -[UIPasteboard string]
仍然可以返回 nil
如果类 NSString
的对象不能从 提供的任何数据构造itemProviders
.
这是一个重现您所处情况的示例:
先实现一个符合NSItemProviderWriting
的测试类
#import <Foundation/Foundation.h>
static NSString *const UTTypeUTF8PlainText = @"public.utf8-plain-text";
@interface TestObject : NSObject <NSItemProviderWriting>
@end
@implementation TestObject
- (NSData *)randomDataWithLength:(NSUInteger)length {
NSMutableData *data = [NSMutableData dataWithLength:length];
SecRandomCopyBytes(kSecRandomDefault, length, data.mutableBytes);
return data;
}
#pragma mark - NSItemProviderWriting
+ (NSArray<NSString *> *)writableTypeIdentifiersForItemProvider {
return @[UTTypeUTF8PlainText];
}
- (nullable NSProgress *)loadDataWithTypeIdentifier:(nonnull NSString *)typeIdentifier forItemProviderCompletionHandler:(nonnull void (^)(NSData * _Nullable, NSError * _Nullable))completionHandler {
// random data that an utf8 string may not be constructed from
NSData *randomData = [self randomDataWithLength:1];
completionHandler(randomData, nil);
return nil;
}
@end
然后将测试对象放入粘贴板
if (@available(iOS 11.0, *)) {
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
TestObject *item = [TestObject new];
[pasteboard setObjects:@[item]];
if ([pasteboard hasStrings]) {
// text may be nil
NSString *text = pasteboard.string;
}
}
关于ios - 尽管 "string"为真,但 UIPasteBoard "hasStrings"属性返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66038304/
我想将图像和文本(两者)复制到 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粘贴板类型数据
我是一名优秀的程序员,十分优秀!