XamarinのLiferay画面のトラブルシューティングとFAQ
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、こちらまでご連絡ください。
Liferayは細心の注意を払ってXamarinのLiferay Screensを開発しましたが、いくつかの一般的な問題に直面する可能性があります。 このチュートリアルでは、これらの問題のヒントと解決策、およびScreens for Xamarinに関する一般的な質問への回答を示します。
一般的なトラブルシューティング
特定の問題を調査する前に、Visual StudioとMono .NETフレームワークの正しいバージョンがインストールされていることを最初に確認する必要があります。 各スクリーンレットのリファレンスドキュメント( Android および iOS利用可能)には、これらのバージョンがリストされています。
Liferayが開発したサンプルのXamarin.AndroidおよびXamarin.iOSアプリの調査にも役立つ場合があります。 どちらもスクリーンレット、ビュー(Android)、およびテーマ(iOS)の使用方法の良い例です。
いつでも行き詰まったら、フォーラム 質問を投稿できます。 喜んでお手伝いします!
一般的な問題
-
ビルドの問題:
Visual Studioで Clean を実行するだけでは不十分な場合があります。 Visual Studioを閉じ、クリーンアップによって削除されなかった
bin
およびobj
フォルダーをすべて削除してから、プロジェクトを再構築します。 -
NSUnknownKeyException
Xamarin.iOSでエラー:このエラーは、iOSのLiferay ScreensのXIBファイルに間違ったモジュール名がある場合に発生します。 Interface BuilderでXIBファイルの カスタムクラス 割り当てのモジュール名を削除し、Xcodeでこれを解決する必要があります。
-
セレクターは既に登録されています
Xamarin.iOSでエラー:このエラーは、1つ以上のメソッドが同じ名前を共有しているために発生します。 これを修正するには、バインディングファイルを更新する必要があります。 Jira チケットを提出するか、 フォーラム問題を投稿してください。
-
Xamarin.iOSは、コンソールにエラーメッセージなしで予期せずクラッシュします。
ログファイルを確認してください。 Mac OSでは、コンソールを使用してこれを行います。 Windowsでは、イベントビューアーを使用します。 アプリでは、 ユーザーレポート をクリックしてから、アプリの名前を探す必要があります。 複数のログファイルが存在する場合があることに注意してください。
-
アプリはXamarin.iOSのデリゲートメソッドを呼び出しません。
View Controllerにデリゲートメソッドを実装するときは、必ず
[Export(...)]
アノテーションを付けてください。 また、View ControllerをScreenletインスタンスのDelegate
プロパティに設定する必要があります。 ログインスクリーンレットのデリゲート、ILoginScreenletDelegate
を実装するこのようなビューコントローラーの例を次に示します。public partial class ViewController : UIViewController, ILoginScreenletDelegate { protected ViewController(IntPtr handle) : base(handle) {} public override void ViewDidLoad() { base.ViewDidLoad(); this.loginScreenlet.Delegate = this; } [Export("screenlet:onLoginResponseUserAttributes:")] public virtual void OnLoginResponseUserAttributes(BaseScreenlet screenlet, NSDictionary<NSString, NSObject> attributes) { ... } ... }
データ型マッピング
Xamarinコードとサンプルアプリの理解を深めるには、このリストを参照してプラットフォーム間のタイプマッピングを比較してください。 XamarinアプリはC \#で作成する必要がありますが、ネイティブコードとはいくつかの違いがあります。
-
デリゲート(iOS)またはリスナー(Android)クラス:
これらのクラスは、スクリーンレットのイベントをリッスンするため重要です。 XamarinのLiferay Screensでは、スクリーンレットのデリゲートとリスナーの先頭に
I
が付きます。 たとえば、ネイティブコードでのログインスクリーンレットのデリゲートはLoginScreenletDelegate
であり、XamarinではILoginScreenletDelegate
です。 同様に、ネイティブコードでのLogin ScreenletのリスナーはLoginListener
であり、XamarinではILoginListener
です。 クラスがインターフェースの標準実装であるクラス/インターフェースのペアを定義する場合、同様の命名スキームを使用します。 -
ゲッターおよびセッターメソッド:
ネイティブコードで値を取得または設定するには、そのゲッターメソッドとセッターメソッドを使用します。 XamarinのLiferay Screensでは、このようなメソッドをプロパティに変換する必要があります。 これらのメソッドが1つしかない場合は、メソッド自体を呼び出すことができます。 たとえば、
// If you implemented a setter and a getter, call the property loginScreenlet.Listener = this; // Otherwise, call the method loginScreenlet.getListener();
-
パスカルのケース規則:
通常、C \#コードはPascalの場合で記述されます。 ただし、保護されたインスタンスフィールドまたはパラメーターにはキャメルケースを使用する必要があります。
SwiftとC \#の同等の言語
-
Swiftのプロトコルは、C \#のインターフェイスに類似しています。
// Swift protocol DoThings { func MyMethod() -> String } // C# interface DoThings { string MyMethod(); }
-
Swiftの初期化子は、C \#のコンストラクターに類似しています。
// Swift class MyClass { var myVar : String = "" init(myVar : String) { self.myVar = myVar } } var testing = MyClass(myVar: "Test") // C# class MyClass { protected string myVar = ""; public MyClass() {} public MyClass(string myVar) { this.myVar = myVar; } } var testing = new MyClass(myVar: "Test");
スウィフトとCの間に言語の同等\#の詳細については、参照 このクイックリファレンス。
JavaとC \#の同等の言語
クラスまたはインターフェースを拡張または実装するには、Javaは extends
または implements
キーワードを使用する必要があります。 C \#はこれを必要としません:
// Java
class Bird extends Vertebrate implements Actions {
...
}
// C#
class Bird : Vertebrate, Actions {
...
}
JavaとC \#間の言語の同等物の詳細については、を参照 Java開発者チートシートのためのC \#。
よくある質問
-
Visual Studioを使用する必要がありますか?
いいえ。ただし、強くお勧めします。 ただし、必要に応じて、代わりにXamarin StudioまたはVisual Studio Codeを使用できます。
-
デリゲートメソッド名の上の
[Export(...)]
の意味は何ですか?つまり、この属性により、Objective-Cでプロパティとメソッドが使用可能になります。 Xamarinのドキュメント では、この属性について詳しく説明しています。