การดีบักข้อยกเว้นการอ้างอิง NULL เมื่อมุมมองที่มีผลผูกพันใน MVVMCROSS เกี่ยวข้องกับหลายขั้นตอนในการระบุและแก้ไขปัญหา นี่คือคำแนะนำโดยละเอียดเกี่ยวกับวิธีการแก้ไขปัญหานี้:
1. ระบุแหล่งที่มาของข้อยกเว้น **
- ตรวจสอบการติดตามสแต็ก: การติดตามสแต็กจะระบุว่ามีข้อยกเว้นการอ้างอิงโมฆะเกิดขึ้นที่ใด สิ่งนี้อาจอยู่ในมุมมองของคุณรูปแบบการดูหรือภายใน MVVMCROSS เอง- ปัญหาทั่วไป: แหล่งที่มาทั่วไปรวมถึงบริการที่ไม่ได้ลงทะเบียนโมเดลมุมมองโมฆะหรือการผูกมัดที่กำหนดค่าไม่ถูกต้อง
2. ตรวจสอบ ViewModel และการตั้งค่าการเชื่อมโยง **
- การเริ่มต้น ViewModel: ตรวจสอบให้แน่ใจว่ารูปแบบมุมมองของคุณเริ่มต้นอย่างเหมาะสมและตั้งค่าบนมุมมอง ใน MVVMcross สิ่งนี้มักจะเกิดขึ้นโดยอัตโนมัติ แต่คุณสามารถตรวจสอบได้โดยตรวจสอบคุณสมบัติ `viewModel` ของมุมมองของคุณ- การกำหนดค่าการเชื่อมโยง: ตรวจสอบให้แน่ใจว่ามีการกำหนดค่าการผูกไว้อย่างถูกต้อง ใช้ `createBindingSet` เพื่อกำหนดการผูกและตรวจสอบให้แน่ใจว่าประเภทที่ตรงกัน (เช่น` mainview` และ `mainviewmodel ')
3. ตรวจสอบการอ้างอิงโมฆะในการเชื่อมโยง **
- เส้นทางคุณสมบัติ: ตรวจสอบให้แน่ใจว่าเส้นทางคุณสมบัติในการผูกของคุณถูกต้องและคุณสมบัติมีอยู่ในรูปแบบมุมมอง ตัวอย่างเช่นหากคุณมีผลผูกพันกับ `vm => vm.myproperty` ให้ตรวจสอบว่า` myProperty` ไม่เป็นโมฆะและกำหนดไว้อย่างถูกต้อง- การเริ่มต้นล่าช้า: หากคุณสมบัติเริ่มต้นในภายหลัง (เช่นใน `viewDidload`) ให้แน่ใจว่ามีการใช้การผูกหลังจากการเริ่มต้น
4. ใช้การเชื่อมโยงล่าช้าสำหรับเนื้อหาแบบไดนามิก **
- หากคุณกำลังสร้างเนื้อหาหรือการควบคุมแบบไดนามิกให้พิจารณาใช้ `delaybind` เพื่อให้แน่ใจว่าการเชื่อมโยงจะถูกนำไปใช้หลังจากสร้างมุมมองอย่างสมบูรณ์ สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อทำงานกับการควบคุมแบบกำหนดเองหรือรายการแบบไดนามิก5. ตรวจสอบให้แน่ใจว่าการลงทะเบียน IOC ที่เหมาะสม **
- การลงทะเบียนบริการ: หากใช้บริการในรูปแบบมุมมองของคุณตรวจสอบให้แน่ใจว่าได้ลงทะเบียนในคอนเทนเนอร์ IOC MVVMCROSS ใช้ `imvxiocprovider` เพื่อจุดประสงค์นี้- InitializElastChance: หากทำการลงทะเบียน IOC เฉพาะแพลตฟอร์มให้แน่ใจว่าคุณโทรหา `base.initializelastchance ()` เพื่อหลีกเลี่ยงปัญหาเช่นที่อธิบายไว้ใน [4]
6. ปัญหาการผูกมัดแบบกำหนดเอง **
- หากคุณใช้การเชื่อมโยงที่กำหนดเองให้ตรวจสอบว่าคลาสการเชื่อมโยงเป้าหมายของคุณมีการใช้งานและลงทะเบียนอย่างถูกต้องใน `setup.cs` โดยการเอาชนะ` fillTargetFactories 'ดังที่แสดงใน [5]7. เทคนิคการดีบัก **
- จุดพัก: ใช้จุดพักเพื่อตรวจสอบสถานะของรูปแบบมุมมองของคุณและการผูกที่รันไทม์- การบันทึก: เปิดใช้งานการบันทึก MVVMCROSS เพื่อรับข้อมูลรายละเอียดเกี่ยวกับการดำเนินการที่มีผลผูกพันและข้อผิดพลาดที่อาจเกิดขึ้น
8. ปัญหา mvxasyncMommand **
- หากใช้ `mvxasynccommand` ตรวจสอบให้แน่ใจว่า` mvx.iocprovider` จะเริ่มต้นก่อนที่จะสร้างคำสั่งดังที่อธิบายไว้ใน [1] นี่เป็นสิ่งสำคัญสำหรับสถานการณ์การทดสอบหน่วยโดยทำตามขั้นตอนเหล่านี้คุณควรจะสามารถระบุและแก้ไขข้อยกเว้นการอ้างอิงที่เป็นโมฆะส่วนใหญ่ที่เกี่ยวข้องกับการเชื่อมโยงการเชื่อมโยงใน MVVMcross
การอ้างอิง:[1] https://stackoverflow.com/questions/53597908/mvvm-cross-null-references-hen-unit-testing-mxvasyncMommand/53618570
[2] https://stackoverflow.com/questions/56531225/problem-with-binding-to-mvxview-with-xamarin-ios-and-mvmcross
[3] https://github.com/mvvmcross/mvvmcross/issues/1378
[4] https://stackoverflow.com/questions/18954938/nullreference-exception-during-binding-with-mvvmcross
[5] https://www.mvvmcross.com/documentation/advanced/custom-data-binding
[6] https://stackoverflow.com/questions/40419789/mvvmcross-platform-exceptions-mvxexception-bindingcontext-is-null-during-mvxadap/40420356
[7] https://www.mvvmcross.com/documentation/advanced/mvxnotifytask
[8] https://www.mvvmcross.com/documentation/fundamentals/data-binding