ディーバ Blog

大阪発 C#の会社、株式会社ディーバの Blog です。

例外 Foundation.You_Should_Not_Call_base_In_This_Method

Xamarin で開発していると「Foundation.You_Should_Not_Call_base_In_This_Method: Exception of type ‘Foundation.You_Should_Not_Call_base_In_This_Method’ was thrown.」という例外とメッセージが出ることがあります。

名前の通り、base クラスのメソッドを呼び出してはいけません。UITableViewSource など override して使っているメソッドで、エディターが自動挿入した base クラスへの呼び出しがないか確認してみてください。

Xamarin + MvvmCross などの環境の場合、ピンポイントで例外発生場所を示してくれないときがあります。TableViewSource の場合、CanEditRow メソッドなどが base クラスのメソッドをつかえません。

MvvmCross + Xamarin.iOS で NavigationBar 付きの modal 画面を使う

MvvmCross で画面遷移は ViewModel 側で ShowViewModel<SecondViewModel>() のように ShowViewModel メソッドを使います。

github.com

このとき iOS アプリで modal 画面として表示する方法です。

IMvxModalIosView の実装

View 側のクラスは IMvxModalIosView を実装します。

public partial class SecondView : MvxViewController<SecondViewModel>, IMvxModalIosView<SecondViewModel>
{
    public SecondView(IntPtr handle) : base(handle)
    {
    }
}

MvxIosViewPresenter のカスタマイズ

デフォルトの Presenter クラスを override することで、iOS の画面遷移・表示をカスタマイズできます。modal 表示をサポートするクラスが用意されているので、これを使います。

AppDelegate.cs にある次の部分を修正します。

var setup = new Setup(this, Window);
setup.Initialize();

単に modal を使う場合は、MvxModalSupportIosViewPresenter クラスを使います。この場合は modal 画面の NavigationController は null になります。

var presenter = new MvxModalSupportIosViewPresenter(this, Window);
var setup = new Setup(this, presenter);
setup.Initialize();

NavigationBar を付けて modal 画面を表示したい場合は、MvxModalNavSupportIosViewPresenter クラスを使います。

var presenter = new MvxModalNavSupportIosViewPresenter(this, Window);
var setup = new Setup(this, presenter);
setup.Initialize();

何をしているかはソースコードを読むしかありません。

github.com

Xamarin.Android で interface を実装するとき Handle と Dispose の実装

Xamarin.Android で Listener などの interface を実装しようとしたとき、Handle プロパティと Dispose メソッドを実装する必要があります。

class SampleListener : AppBarLayout.IOnOffsetChangedListener
{
    public IntPtr Handle => throw new NotImplementedException();

    public void Dispose()
    {
        throw new NotImplementedException();
    }

    public void OnOffsetChanged(AppBarLayout appBarLayout, int verticalOffset)
    {
        throw new NotImplementedException();
    }
}

これは Java.Lang.Object を継承すれば解決します。

class SampleListener : Java.Lang.Object, AppBarLayout.IOnOffsetChangedListener
{
    public void OnOffsetChanged(AppBarLayout appBarLayout, int verticalOffset)
    {
        throw new NotImplementedException();
    }
}

「エラー: error MT1108: Could not find developer tools for this 10.2.1 (14D27) device.」でアプリが起動しない

Xamarin (Visual Studio) で次のようなエラーが出る場合の対処です。

起動に失敗しました。アプリ ‘AppName’‘DeviceName’ で起動できませんでした。 エラー: error MT1108: Could not find developer tools for this 10.2.1 (14D27) device. Please ensure you are using a compatible Xcode version and then connect this device to Xcode to install the development support files.

  • アプリの SDK バージョンが iOS 10.1
  • デバッグ対象のデバイスが iOS 10.2
  • Xcode のサポートしているバージョンが iOS 10.1

というように、アプリの配置先の方が新しいバージョンだと起こるようです。

対処は、最新の Xcode をインストールして、アプリの SDK バージョンを対象のデバイスと合わせます。

※ このエラーは Xcode によるもので Xamarin とは直接関係しません。

「Visual Studio 2017 先取り特集」連載の「Visual Studio for Mac」紹介記事が公開されています

2016/2/15、CodeZine で 次期バージョン「Visual Studio 2017(Visual Studio “15")」先取り特集 第3回『使う言語はC#のみ! Macアプリケーションはもちろん、Webアプリやスマホアプリも開発可能な「Visual Studio for Mac」登場』が公開されています。

この第3回は、株式会社ディーバ 代表取締役 青柳臣一が担当しています。

対象読者は次の通り。ご興味のある方はどうぞ。

  • Macでアプリケーション開発をおこなっている方
  • Visual Studioでアプリケーション開発をおこなっていてMacでも開発をおこないたい方
  • Xamarinでの開発をおこなっている方

codezine.jp

ディーバは、エクセルソフト「Xamarin 開発支援サービス」のパートナー企業です

株式会社ディーバは、エクセルソフト株式会社の提供する「Xamarin 開発支援サービス」の パートナー企業 に登録されました。

Xamarin 開発支援サービスについて

2017年1月11日 Xamarin 開発支援サービス プレスリリース より。

エクセルソフトは、Xamarin のエキスパートであるパートナー企業と提携し、モバイル アプリの開発支援サービスを提供開始

エクセルソフト株式会社(東京都港区)は、マイクロソフト社の Visual Studio に統合され、クロスプラットフォーム モバイル アプリの開発環境としてますます注目を集めている Xamarin のエキスパートでモバイル アプリの開発実績のあるパートナー企業と提携し、モバイル アプリの開発支援サービスを 2017 年 1 月 11 日より日本国内で提供開始しました。

株式会社ディーバについて

大阪発 C# の会社「株式会社ディーバ」は、平成4年創立以来 、最新の技術を自分たち自身で確かめ、その技術を元にお客様のさまざまなニーズに幅広くお答えしてきました。Xamarin を活用し最新技術を駆使した iOS / Android / Windows モバイルアプリケーションおよびデスクトップアプリケーション、さらにはサーバーアプリケーションも含めて幅広いソフトウエア開発ソリューションをご提供いたします。

詳細は以下のページをご参照ください。 株式会社ディーバ