モノクロタイム

I'm from the future!

【iOS】アプリ間で文字列や画像の受け渡しをしたい【Pasteboard】

 

お久しぶりです。れいじです。

 

文字認識の解説やるとかいってやってないですね。ごめんなさい。

 

今回は完全に自分用メモです…。

 

アプリ間でドキュメントの受け渡しに関するページってたくさんあるんですけど、

ただ単に文字列だったり画像だったりの受け渡しについての記述って少ないですね。

 

そこでたどりついたのがPasteboardの機能なわけですが、これに関する記述もあるっちゃあるんですね。

Pasteboardは簡単に言うとクリップボードです。文字列や画像をコピペして他のアプリにデータを渡すことができます。

でもこのPasteboard、2つ種類があって

・GeneralPasteboard

どのアプリからもアクセスできる領域に文字列や画像をコピーして置いておける。

基本データは上書きされていくので古いデータはどんどん消されていくが、デバイス単位で共有している領域なので、誤って自分のデータがガオンされるときがある

・CustomPasteboard

領域に名前をつけて、その名前を知っているアプリ同士でしかデータのやりとりをしない。

 

特に今作っているアプリはIDをやり取りするのでデバイス単位で共有されると困ります。

ここはCustomPasteboardを使うしかない!

 

って所で躓いた。

情報が少ない。

 

ってことで記事書きました。

まずはgeneralPasteboard

文字列を受け渡す側のコードはこちら

generalPasteboardSet.m

URLスキームを用いた他アプリ連携に関してはこちらを参考にさせて頂きました。

http://d.hatena.ne.jp/nakamura001/20111105/1320501005

 

データの受け渡しをするためにDataSetというサンプルアプリを作りました。

このアプリは他のアプリから文字列を受け取り、ラベルに表示するだけの簡単なアプリです。

 

そういうことでヘッダは簡潔にこれだけ。

DataSetViewController.h

 

受け取り部分は以下のとおり。

generalPasteboardGet.m

 

 

とまあ、これだけで簡潔に文字列の受け渡しと受け取りができたわけですが、前述のとおりユーザー自身が使えるクリップボード領域を使うのでこれはよろしくない…。

というわけでCustomPasteboardを使っていきますよ。

 

データの受け渡し側

customPasteboardSet.m

 

データの受け取り側。ヘッダは一緒ですよ

customPasteboardGet.m

UIPasteboardで作った領域に"DataSet"という名前を付けて、この領域の名前を知っているアプリだけがこの領域にアクセスできます。

 

これだけのことなんだけど思ったより情報が少なかったなあ。

 

こちらを参考にさせて頂きました。

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIPasteboard_Class/Reference.html