SqliteCommandをExecuteReader()と組み合わせつつDisposeせずに使い続けると例外が起きる

iOSシミュレータでMonoTouchプログラムをデバッグしていると、Mono.Data.Sqlite.UnsafeNativeMethods.sqlite3_prepareで例外が発生するようになった。 MonoTouch 4.0.3と4.0.4.1とMono2.10.2の組み合わせ全てで問題がおきる。 この例外、MonoDevelopではキャ…

文字列の描画に必要な短形の計算の方法

MonoTouchにおいて文字列の描画に必要な短形の計算の方法 UIViewのStringSizeメソッド NSStringのStringSizeメソッド

UIView上での左右のスワイプを検出する その2

UISwipeGestureRecognizerを使う方法。自前でイベントを処理するよりはるかにコードが簡潔になる。 using MonoTouch.Foundation; using MonoTouch.UIKit; using MonoTouch.ObjCRuntime; public class UISwipeView : UIView { UISwipeGestureRecognizer swRec…

ニュートラルカルチャーなCultureInfoからDateTimeFormatを取り出せない

MonoTouch*1ではニュートラルカルチャーなCultureInfoからDateTimeFormatを取り出せない。 CultureInfo c = new CultureInfo("en"); DateTimeFormatInfo f = c.DateTimeFormat; <- ここでNotSupportedExceptionが発生する たしかに言語だけの指定で地域が不…

UITextFieldでキーボードを表示させたくない

ShouldBeginEditingのdelegateで常にfalseを返すようにすればキーボードが表示されなくなる。 UITextField text = new UITextField(new RectangleF(0,0,50,31); text.ShouldBeginEditing += delegate { return false; } キーボードは表示されなくなるが、そ…

UIPopoverControllerでタイトルを追加する

UIPopoverControllerでタイトルを追加にはUIPopoverControllerの元になるUIViewControllerに対してTitleとNavigationItemにボタンを追加する。 しかし直接UINavigationControllerを作ってTitle等を変えてもなにも起きなかった。 この場合、UIViewController…

UIPopoverControllerで矢印を表示しないようにする

UIPopoverControllerで矢印を表示しないようにするにはpresentPopoverFromRectのpermittedArrowDirectionsに0を渡せば良い。 しかしMonoTouchのPresentFromRectメソッドはUIPopoverArrowDirection列挙値しか受け付けてくれない。というわけで0を渡せるように…

実機上でデバッグするときのIPアドレス

実機上でデバッグするときはネットワーク経由で行う。このときのIPアドレスは基本的に無線LAN(Airmac)のIPアドレスがデフォルト。しかし有線LANや仮想LANが有効になっているとMonoDevelopが使用するIPアドレスを間違うことがある。 この問題はMonoDevelopの…

UITabBarのボタンのハイライト状態を解除する

UITabBarのボタンを押すとハイライトされる。これを解除するにはUITabBarのSelectedItemにnilを代入する必要がある。MonoTouchだとnull代入だと思い、 tabBar.SelectedItem = null; としたらnullチェックの例外が発生した。どうも引数nullには対応していない…

VGAへの出力

VGAケーブルやAVデジタルケーブルで追加されたスクリーンにUIViewを表示する為に以下の様なコードを書いた。 if (UIScreen.Screens.GetLength(0) > 1) { UIScreen screen = UIScreen.Screens[1]; UIWindow awin = new UIWindow(); awin.Screen = screen; UIB…

CGContextで日本語を描画する

DrawメソッドでCGContextを使って日本語を描画しようとしたらどうにも文字化けしてしまう。調べると本家SDKでも同じで、これはNSStringのdrawStringを使うことで回避できるとのこと。これをMonoTouchでやってみた。 public override void Draw (System.Drawi…

特殊フォルダ

Environmentクラスの特殊フォルダ Environment.SpecialFolder を実機で取得した。 特殊フォルダ 戻り値 ApplicationData /private/var/mobile/Applications/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Documents/.config CommonApplicationData /usr/share Commo…

MonoDevelopをproxyに対応させる

MonoDevelop v2.6 Beta 2がなかなか終了しなくて困っていた。 調べるとどうも終了時にインターネットアクセスを行っている。 しかし環境的にプロキシ経由でなければ通信できない。 結局ソケットがタイムアウトするまで延々と待ち続けているのが原因だった。…

通貨の書式でフォーマットした文字列の円記号がバックスラッシュになる

string v = string.Format("C", 1900); とした文字列をUILabelなんかで表示すると円記号がバックスラッシュとして表示される。 これはCultureInfoのNumberFormat.CurrencySymbolが文字コードの0x5c*1になっているから。 かっこ悪いので NumberFormat.Currenc…

回転の通知を各UIViewで受け取る

回転の通知を各UIViewで受け取るには例えば public class UITextField2 : UITextField { private NSObject deviceRotateNotification; public UITextField2 () { deviceRotateNotification = NSNotificationCenter.DefaultCenter.AddObserver (UIDevice.Orie…

UIPopoverControllerをPresentFromRectで表示するときの引数

ググって見つけたサンプルを参考にこう書いていた。 UIPopoverController popover = new UIPopoverController(viewController); popover.PopoverContentSize = new System.Drawing.SizeF(300f, 300f); popover.PresentFromRect(target.Frame, target, UIPopo…

実機にコンパイルしたバイナリを転送できなくなった

突然、実機にビルドしたバイナリを転送できなくなった。 Please ensure your device is connected... Connected to: iPod Initializing file service... Uploading application Finalizing file service... Connected to: iPod Installing application Unhan…

UIBarButtonItemの隠しAPIを読んでみる

本家SDKだとUIBarButtonItemのinitWithBarButtonSystemItemに100以上の値を指定することで特殊なボタンを作ることができる。これをMonoTouchでやってみた。 using MonoTouch.ObjCRuntime; using MonoTouch.UIKit; using MonoTouch.Foundation; public class …

各種画像

画像一覧 ファイル名 対象デバイス 画像サイズ(px) 表示先 Icon.png iPhone 3G,iPhone 3GS,iPod touch 3rd 57 x 57 ホーム Icon@2x.png iPhone 4,iPod touch 114 x 114 ホーム Icon72.png iPad 72 x 72 ホーム Icon-Small.png iPhone 3G,iPhone 3GS,iPod tou…

Xamarin

Mono再出発なのか? http://tirania.org/blog/archive/2011/May-16.html現時点でMonoTouchの購入もアクティベートもできない状態のようなので、 Macがぶっ壊れてもいいようにバックアップとらなければ。

UIButtonの隠しAPIを呼んでみる

本家SDKだとUIButtonのbuttonWithTypeに100以上の値を指定することで特殊なボタンを作ることができる。これをMonoTouchでやってみた。 using MonoTouch.ObjCRuntime; using MonoTouch.UIKit; using MonoTouch.Foundation; public static class UIGlassButton…

ビューへの変更が画面に反映されない

なにか処理をしているときに処理中の表示を出さなければならなくなった*1。 void Test() { progressView.Hidden = false; //重い処理 progressView.Hidden = true; } この時、progressViewは画面上に一切表示されることなく処理が終わってしまう。 ググるとU…

最初の画面が表示されるまで真っ黒

最初こうしていた。たぶんMonoTouchのテンプレート通り。 public partial class AppDelegate : UIApplicationDelegate { public override bool FinishedLaunching (UIApplication app, NSDictionary options) { window.AddSubview(mainViewController.View);…

シェイクの検知

App起動時にあらかじめUIApplication.SharedApplication.ApplicationSupportsShakeToEditをtrueにしておく。 public partial class AppDelegate : UIApplicationDelegate { public override bool FinishedLaunching (UIApplication app, NSDictionary option…

ビューの順番

個人的な備忘録。 ビューの順番はSubviews配列の最後が最前面として配列の先頭にいくほど後ろ側。 AddSubviewで足したビューは最前面になる。つまりSubviews配列の最後にpushされている。 InsertSubviewで最後面に足したいときは位置の引数を0にする。

InputAccessoryViewが実機で動作しない

UITextFieldやUITextViewにおいてキーボードが表示される時にカスタムビューを追加する手段としてInputAccessoryViewがある。 これはググると public class TestText : UITextField { public override UIView InputAccessoryView { get { UIView view = new …

実機だけで発生する例外

実機上で以下のコードを実行すると string from = ""; Type fromType = from.GetType(); TypeConverter converter = TypeDescriptor.GetConverter(from); 三行目のConverterを取得する所で System.MissingMethodException: Default constructor not found fo…

MonoTouch v4が不安定

少し前にv4がでていたが嫌な予感がしたので放置しておいた。 しかしさすがにSDK4.3対応を考えるとv4にしなければならない。 しぶしぶ入れてはみたものの予想していたとおりとても不安定で結局v3に戻している。 コンパイラが例外を吐いてエラー終了 v3では全…

Info.plistファイル内の独自キーの値を取得する

プロジェクトのルートにあるInfo.plistファイルに追加した独自キーにひもづく値はNSBundle.MainBundle.InfoDictionaryから取得できる。 Dictionary型はNSMutableDictionary型になる。 NSString key1 = new NSString("TEST01") string value1 = NSBundle.Main…

UIView上での左右のスワイプを検出する

UIViewを継承して以下のコードを貼り付ける。 float horizontalTolerance = 10f; public float HorizontalTolerance { get { return horizontalTolerance; } set { horizontalTolerance = value; } } float verticalTolerance = 6f; public float VerticalTo…