私はListViewを持っています。その内容はボタンクリックで更新されます。ビューモデルでListViewはObservableCollection<MyClass>
にバインドされています。 しかし、データの更新時にiOSでnull参照例外が発生します(Androidでは正常に動作します)。TapGestureRecognizerのデータリフレッシュ時のヌル参照例外がコマンドにバインドされました
iOSアプリケーションでMain
メソッドで例外がスローされます。
// NullReferenceException thrown here.
UIApplication.Main(args, null, "AppDelegate");
以下はスタックトレースです。 Xamarin.Forms.Platform.iOS.EventTracker.LoadRecognizersで
()[0x0005d]:0 Xamarin.Forms.Platform.iOS.EventTracker.OnElementChangedで (System.Objectの送信者、Xamarin.Forms.Platform .iOS.VisualElementChangedEventArgs E)[0x0004e]:0 Xamarin.Forms.Platform.iOS.ViewRendererで
2[TView,TNativeView].OnElementChanged (Xamarin.Forms.Platform.iOS.ElementChangedEventArgs
1 [0 Xamarin.Forms.Platform.iOS.VisualElementRenderer1[TElement].OnElementChanged (Xamarin.Forms.Platform.iOS.ElementChangedEventArgs
1 [TElement] E)[0x0002c]中のTElement] e)[0x00000] in:0 (Xamarin.Forms.Platform.iOS.ImageRenderer)。 <> n__0(Xamarin.Forms.Platform.iOS.ElementChangedEventArgs`1 [TElement] e)[0x00000] in:0 Xamarin.Forms.Platform.iOS.ImageRenderer + d__2.MoveNext()[0x000d6] in:0 ---例外がスローされた前の場所からのスタックトレースの最後--- /Library/Frameworks/Xamarin.iOS.framework/Versions/11.6.1.2のSystem.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()[0x0000c]の /src/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:at System.Runtime.CompilerServices.AsyncMethodBuilderCore + <> c.b__6_0(System.Object状態)[0x00000] in/Library /Frameworks/Xamarin.iOS.framework/Versions/11.6.1.2/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/AsyncMethodBuilder.cs:1018 at UIKit.UIKitSynchronizat ionContext + c__AnonStorey0。 <> m_0()[0x00000] /Users/builder/data/lanes/5665/6857dfcc/source/xamarin-macios/src/UIKit/UIKitSynchronizationContext.cs:24 Foundation.NSAsyncActionDispatcher.Apply()[0x00000] in /Users/builder/data/lanes/5665/6857dfcc/source/xamarin-macios/src/Foundation/NSAction.cs:163 at(ラッパーによって管理されるネイティブ)UIKit.UIApplication:UIApplicationMain(int、string []、 /ユーザー/ビルダー/データ/レーン/ 5665/6857dfcc/source/xamarin-System.IntPtrプリンシパルSystem.IntPtrプリンシパルSystem.IntPtrプリンシパルSystem.IntPtrプリンシパルSystem.IntPtrプリンシパルSystem.IntPtrプリンシパルのSystem.IntPtrのUIKit.UIApplication.Mainで ) MacOSX/src/UIKit/UIApplication.cs:79 、UIKit.UIApplication.Main(System.String [] args、System.String principalClassName、System.String delegateClassName)/ Users/builder/data/lanes/5665の[0x00038] /6857dfcc/source/xamarin-macios/src/UIKit/UIApplication.cs:63 at Omers.MyTeam.Mobile.iOS.Application.Main(System.String [] args)/Users/user/Projects/proj/Company.Proj.Mobile/Company.Proj.Mobile.iOS/Main.csの[0x00001]: 12
以下は問題のコードです。
<ListView ItemsSource="{Binding PeopleData}" HasUnevenRows="True">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
...
<Image VerticalOptions="Center"
Source="phone_icon"
WidthRequest="45"
HeightRequest="45"
Margin="0,0,5,0"
Opacity="0.27">
<!--<Image.GestureRecognizers>
<TapGestureRecognizer NumberOfTapsRequired="1"
Command="{Binding Source={x:Reference PeoplePage}, Path=BindingContext.CallPersonCommand}"
CommandParameter="{Binding .}"></TapGestureRecognizer>
</Image.GestureRecognizers>-->
</Image>
<Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
画像のTapGestureRecognizer
は、コメントを外すと例外が発生します。コンテンツページの名前はPeoplePage
です。
ListViewが最初に読み込まれるときは、アプリケーションの起動時にエラーが発生しません。 2回目にListViewを再読み込みするためにボタンをクリックします。正常に動作します。 ListViewをリフレッシュするためにもう一度ボタンをクリックします。エラーが発生します。
ボタンをクリックすると、ListViewがバインドされているObservableCollection<MyClass>
のデータが更新されます。
これに関するアイデアは大変ありがたいです。ありがとう!
デバッガでステップ実行してみましたか? – Jason
はい。コードは正常に動作します。そして、エラーがスローされます。 TapGestureRecognizerからCommandを削除しようとしましたが、空のイベントハンドラを代わりに使用しましたが、同じことが起こります。私がイベントハンドラを削除すると、うまく動作します。うーん... – erdinger