Home > Archives > 2010年8月 Archive
2010年8月 Archive
iPhone gdata-objectivec-client でYouTubeへ動画をアップ
- 2010年8月31日 21:49
- iPhone
iPhoneアプリからYouTubeへの動画アップを実装しました。
その際、かなりつまずいたので解決策をメモしておきます。
つまづいたポイント
- YouTubeアカウント ID&PWが通らない
- アップロード中、エラーで中断する
まず、gdata-objectivec-client ライブラリは下記からDLしてください。
http://code.google.com/p/gdata-objectivec-client/
ビルドするのにかなりつまづきました。
ビルドは下記を参考にしました。
Google Data API クライアントライブラリのビルド
その他、基本的なことはgdata-objectivec-client に入っている。
Examples/YouTubeSampleを参照してください。
1.YouTubeアカウント ID&PWが通らない
ある特定のYouTubeアカウントだとなぜか通らないことがあります。
問題は、サンプルの
YouTubeSampleWindowController.m
- (void)uploadVideoFile;
NSString *username = [mUsernameField stringValue]; NSString *clientID = [mClientIDField stringValue]; NSURL *url = [GDataServiceGoogleYouTube youTubeUploadURLForUserID:username clientID:clientID];
サンプルの通りだとエラーになるアカウントがあります。
これを、
NSURL *url = [GDataServiceGoogleYouTube youTubeUploadURLForUserID:@"default" clientID:@""];
usernameを使わずに@"default"にすると問題は解決されました。
以下参考:
http://code.google.com/p/gdata-objectivec-client/issues/detail?id=22
2.アップロード中、エラーで中断する
次に、何のタイミングでエラーが起きているのかは不明なのですが、
アップロード中に突然中断してしまい、localizedDescriptionには Cannot allocate memory というエラーメッセージがサーバから戻ってくることがありました。
また、NSErrorFailingURLStringKeyにはresume用のアドレスが戻ってきます。
今回検証していて上記のエラー頻発したのは、3GS iOS4でした。(でも3G 3.1.3ではほとんど起きなかった!?)
メッセージの通りメモリか、と。しかし対処法が無いと途方に暮れていたのですが、何とか解決できました。
やはりポイントは
YouTubeSampleWindowController.m
- (void)uploadVideoFile; 内の
サンプルではアップロードする動画ファイルを下記で行っています。
NSData *data = [NSData dataWithContentsOfFile:path];
どうも、これだとメモリを食うらしく、上記を
NSData *data = [NSData dataWithContentsOfMappedFile:path];
にしてやれば、上記のエラーは出なくなりました。
アップロードもどんなに時間がかかっても最後まで無事にできるようになりました。
かなり、ネット上でも情報が乏しかったので、大変でしたが何とか解決出来て良かったです。
また誰かのお役に立てればと思います。
Tweet
- Comments: 0
- TrackBacks: 0
iPhone UISegmentControl の大きさ
- 2010年8月 5日 16:55
- iPhone
UISegmentControlのセグメントはセグメントのテキストを変えると自動で文字数の長さに合わせて大きさを変えてくれます。文字数が少ないと小さいセグメントができちゃう。
その他例えば、タブで画面を切り替えて、セグメントのテキストを入れ替えて使う場合などで、各タブで大きさがマチマチになって気持ち悪い。
そんな時はサイズを固定しちゃいましょう。
たとえば、ボタンが3つあるとして、
それぞれの大きさを60pxに設定して、全体は180pxにします。
//ボタンに使うテキスト
NSArray *seg = [[NSArray alloc] initWithObjects:@"猫",@"鳥",@"犬",nil];UISegmentedControl *segment = [[UISegmentedControl alloc]initWithItems:seg];
//各セグメントのサイズを統一
for(int i = 0; i < 3; ++i) {
[segment setWidth:60 forSegmentAtIndex:i];
}//全体のサイズを設定
CGRect rect = segment.frame;
rect.size.width = 180;
[segment setFrame:rect];
UIBarButtonItem *barButton = [[UIBarButtonItem alloc]initWithCustomView:segment];
self.navigationItem.rightBarButtonItem = barButton;
[segment release];
[barButton release];
[seg release];
Tweet
- Comments: 0
- TrackBacks: 0
iPhone テキストフィールドからフォーカス外す
- 2010年8月 3日 15:27
- iPhone
久々のiPhoneネタ更新です。
viewに複数のテキストフィールがある場合、フォーカスのあたっているテキストフィールドを特定せずにキーボードを隠す方法。
テキストフィールドにフォーカスがあたると、キーボードが自動で出てきます。
iPhone UIKeyboard メモ
このキーボ--ドが出た状態で、UIAlertViewなどが出ると、
ログに"wait_fences: failed to receive reply: 10004003"と出力されます。
特に動作に問題はないようだけど、なんか嫌ですね。
解決法は、UIAlertView等を出す前にキーボードを消せば良いです。
[UITextfield resignFirstResponder] ですね。
テキストフィールドが1つの場合は、これでもいいのですが、もしviewに複数テキストフィールドがある場合は、どのテキストフィールドにフォーカスがあるのか特定しないといけないです。
これは面倒です。
すると、必殺技がありました。
[viewcontroller.view endEditing: YES ];
で、どのテキストフィールドにフォーカスがあっても問題なくキーボードを隠せます。
参考サイト
http://appteam.blog114.fc2.com/blog-entry-99.html
Tweet
- Comments: 0
- TrackBacks: 0
- Profile
-
iPhone/iPad開発・web制作・映像制作をしている平野百貨店の店長個人の覚書です。
ご意見・ご感想などお問合せはコチラからどうぞ。
※最近ツッコミをもらうので一応書いておきます。ブログのタイトル「袖触れ合うも多少の縁」はわざとです。正確には「袖振り合うも多生の縁」が正解です。 - Search
- iPhone Apps
-
- RSS
- リンク