頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


Multipeer Connectivityでデータ送受信時に進捗を得たい

iOS 7で登場したMultipeer Connectivityで画像のように大きいデータを送受信するのってどうするのがいいのかなあと思ってさ。
- (BOOL)sendData:(NSData *)data toPeers:(NSArray *)peerIDs withMode:(MCSessionSendDataMode)mode error:(NSError **)error
↑MCSessionクラスにこんなメソッドがあって、これを使って(NSData型の)画像データを送受信することはできる。
-(void)session:(MCSession *)session didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID
↑受信はこのMCSessionDelegateのメソッドで。

確かGKSessionあたりだと1000バイトまで、なんて縛りがあったんだけどそれよりも大きい画像データの送受信も一撃でできる。
でも、これだとどのくらいデータの送受信が進んでいるのかの進捗が取れないんだよね。
画像データの送受信ってやっぱり数秒から十数秒かかるからやっぱりプログレスバーを表示させたいのよ。

苦肉の策として考えたのが、画像データのNSDataオブジェクトを一度保存しておいて、
- (NSProgress *)sendResourceAtURL:(NSURL *)resourceURL withName:(NSString*)resourceName toPeer:(MCPeerID *)peerID withCompletionHandler:(void (^)(NSError *error))completionHandler
↑こちらのメソッドでデータを送信するという方法。
これだとおなじくMCSessionDelegateメソッドの
- (void)session:(MCSession *)session didStartReceivingResourceWithName:(NSString *)resourceName fromPeer:(MCPeerID *)peerID withProgress:(NSProgress *)progress

- (void)session:(MCSession *)session didFinishReceivingResourceWithName:(NSString *)resourceName fromPeer:(MCPeerID *)peerID atURL:(NSURL *)localURL withError:(NSError *)error
↑あたりで受信の開始、終了を取得できて、進捗はNSProgressオブジェクトでわかる。

これで確かにプログレスバーは実現できたんだけど、なんかスマートじゃない気がするんだけどねえ、、、?

<< 2013年に買った中で一番良かったモノ  TopPage  家にプリンタってなくてもいいんじゃない? >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/844-ed2348fe




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad