如何在iOS粘贴板中获取数据以保持多个访问权限

时间:2012-11-17 10:49:56

标签: ios nsstring nsdata uipasteboard pasteboard

我目前正在尝试做的事情基本上是我有2个应用程序,如果是否安装了另一个应用程序,则以某种方式行事。我找到了粘贴板进行应用程序间通信,所以我想我应该使用它们。这就是问题,这两个应用程序都做这样的事情

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"];
}

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

问题是,我所做的只是关闭第二个应用程序,再次运行它,突然数据为零。我首先想到,在我访问它之后,粘贴板只删除它,所以我在//添加了以下内容

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

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

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

-Run app1

-Run app2(从Pasteboard获取数据)

- 按下主页按钮

-Run app2(数据现在为零)

2 个答案:

答案 0 :(得分:1)

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

pasteboard.persistent = YES;

答案 1 :(得分:1)

所以我弄清楚为什么app2再也看不到了。 setValue:forPasteboardType的作用是覆盖Pasteboard中的第一个项目。因此,每次运行我的应用程序时,它们都会覆盖粘贴板中的对方密钥。

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