私が現在やろうとしているのは、基本的に2つのアプリがあり、もう1つがインストールされているかどうかに基づいて、特定の方法で動作することです。アプリ間通信のために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"];
}
そこで、一方のアプリをインストールしてもう一方のアプリを実行しましたが、最初に動作したとき、データはnilではありませんでした。また、NSDataでNSString初期化子を使用してNSDataをNSStringに変換すると、「文字列」と表示されます。
問題は、2番目のアプリを閉じて再度実行すると、突然データがゼロになることです。最初は、アクセスした後、ペーストボードが削除するだけだと思ったので、//Dostuffに次の行を追加しました
[pasteboard setValue@"string" forPasteboardType:@"com.company.otherapp"];
アプリを2回実行しても、データはまだゼロです。他のアプリがインストールされているかどうかを教えてくれるので、文字列をPasteboardに永久に残す必要があります。それで、1回の実行後にのみデータがnilを返す理由を誰かが知っていますか?
ホームボタンを押してからアプリを再度実行するだけなので、状況は次のようになります。
-app1を実行します
-app2を実行します(Pasteboardからデータを取得します)
-ホームボタンを押す
-app2を実行します(データはnilになりました)