ううむ
上のコードだとダメで、下のコードだといける。どっちもコンパイルは通る。
わたしが書いたコード
- ( void ) actionSheet:( UIActionSheet* ) actionSheet clickButtonAtIndex:( NSInteger )buttonIndex { // Check Button Indexes if( buttonIndex >= 3 ) return; // SourceType UIImagePickerControllerSourceType sourceType = 0; switch ( buttonIndex ) { case 0: { sourceType = UIImagePickerControllerSourceTypePhotoLibrary; break; } case 1: { sourceType = UIImagePickerControllerSourceTypeCamera; break; } case 2: { sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; break; } // default: // break; } // Check Availabirity if( ![UIImagePickerController isSourceTypeAvailable:sourceType] ) return; // Create UIImagePickerControll UIImagePickerController* imagePicker; imagePicker = [[UIImagePickerController alloc] init]; [imagePicker autorelease]; imagePicker.sourceType = sourceType; imagePicker.allowsImageEditing = YES; imagePicker.delegate = self; // Show UIImagePickerController [self presentModalViewController:imagePicker animated:YES]; }
お手本コード
- (void)actionSheet:(UIActionSheet*)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { // ボタンインデックスをチェックする if (buttonIndex >= 3) { return; } // ソースタイプを決定する UIImagePickerControllerSourceType sourceType = 0; switch (buttonIndex) { case 0: { sourceType = UIImagePickerControllerSourceTypePhotoLibrary; break; } case 1: { sourceType = UIImagePickerControllerSourceTypeCamera; break; } case 2: { sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; break; } } // 使用可能かどうかチェックする if (![UIImagePickerController isSourceTypeAvailable:sourceType]) { return; } // イメージピッカーを作る UIImagePickerController* imagePicker; imagePicker = [[UIImagePickerController alloc] init]; [imagePicker autorelease]; imagePicker.sourceType = sourceType; imagePicker.allowsImageEditing = YES; imagePicker.delegate = self; // イメージピッカーを表示する [self presentModalViewController:imagePicker animated:YES]; }
結果
関数名のところで
- ( void ) actionSheet:( UIActionSheet* ) actionSheet clickButtonAtIndex:( NSInteger )buttonIndex
となっていましたが、
- ( void ) actionSheet:( UIActionSheet* ) actionSheet clickedButtonAtIndex:( NSInteger )buttonIndex
が正しかったようです。「clickButtonAtIndex」ではなくて「clickedButtonAtIndex」。ううむ。
んーiPhoneSDKのとあるenum
ファイル名:UIImagePickerController.h
@property(nonatomic) UIImagePickerControllerSourceType sourceType; enum { UIImagePickerControllerSourceTypePhotoLibrary, UIImagePickerControllerSourceTypeCamera, UIImagePickerControllerSourceTypeSavedPhotosAlbum };
なんでこんなに冗長なの。
public enum UIImagePickerControllerSourceType { PhotoLibrary, Camera, SavedPhotosAlbum }
でいいのに。。。冗長なせいで、使うときはこんな感じ。
UIImagePickerControllerSourceType sourceType = 0; switch ( buttonIndex ) { case 0: { sourceType = UIImagePickerControllerSourceTypePhotoLibrary; break; } case 1: { sourceType = UIImagePickerControllerSourceTypeCamera; break; } case 2: { sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; break; } }
しかしC#で書いたenumでも結局使うときも「UIImagePickerControllerSource.PhotoLibrary」とか「UIImagePickerControllerSource.Camera」って書かなきゃダメか。Visual Studio のIntelliSenseが便利すぎるからぽんぽん打てちゃうのがいけないんだ。XCodeのエディタも補完機能あるけどまだ慣れない。まあ慣れですね。