1

我目前正在尝试做的基本上是我有 2 个应用程序,并根据是否安装了另一个应用程序,以某种方式运行。我发现 Pasteboard 用于应用程序间通信,所以我认为我应该使用它们。那么问题来了,两个应用程序都做这样的事情

UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"com.company.app.key" create:YES];
[pasteboard setPersistent:YES];
NSData *data = [pasteboard dataForPasteboardType:@"com.company.otherapp"];
if(data != nil)
{
     // Do stuff
}
NSData *selfKey = [pasteboard dataForPasteboardType:@"com.company.thisapp"];
if(data == nil)
{
     [pasteboard setValue:@"string" forPasteboardType:@"com.company.thisapp"];
}

所以我安装了一个应用程序并运行另一个应用程序,第一次工作时,数据不是零,如果我使用带有 NSData 的 NSString 初始化程序将 NSData 转换为 NSString,我会读取“字符串”。

问题是我所做的只是关闭第二个应用程序,再次运行它,突然数据为零。我一开始以为我访问后粘贴板只是删除它,所以我在 // Do stuff 中添加了以下行

[pasteboard setValue@"string" forPasteboardType:@"com.company.otherapp"];

如果我第二次运行该应用程序,则没有数据仍然为零。我需要字符串永远留在粘贴板中,因为我必须告诉我是否安装了我的其他应用程序,所以有人知道为什么数据仅在 1 次运行后返回 nil 吗?

我必须注意,我所做的只是按下主页按钮,然后再次运行应用程序,所以情况是

-运行应用程序1

- 运行 app2(从粘贴板获取数据)

- 按主页按钮

- 运行 app2(数据现在为零)

4

2 回答 2

1

所以我想通了为什么 app2 再也看不到它了。setValue:forPasteboardType 的作用是覆盖粘贴板中的第一项。所以每次我运行我的应用程序时,它们都会在粘贴板中覆盖彼此的键。

解决方案是使用类的多个粘贴板项来搜索粘贴板类型的索引并从中获取数据。

于 2012-11-17T19:42:12.803 回答
1

加载粘贴板时,应将其设置为持久。在上面代码的第一行之后,添加:

pasteboard.persistent = YES;
于 2012-11-17T15:23:59.667 回答