{"record":{"id":"c694d1ef7baf83ad","repo":"dotnet/maui","slug":"view","errorCode":null,"errorMessage":"view","messagePattern":"view","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"src/Compatibility/Core/src/iOS/CollectionView/TemplateHelpers.cs","lineNumber":15,"sourceCode":"using System;\nusing Microsoft.Maui.Controls.Internals;\nusing ObjCRuntime;\nusing UIKit;\n\nnamespace Microsoft.Maui.Controls.Compatibility.Platform.iOS\n{\n\t[Obsolete]\n\tinternal static class TemplateHelpers\n\t{\n\t\tpublic static IVisualElementRenderer CreateRenderer(View view)\n\t\t{\n\t\t\tif (view == null)\n\t\t\t{\n\t\t\t\tthrow new ArgumentNullException(nameof(view));\n\t\t\t}\n\n\t\t\tPlatform.GetRenderer(view)?.DisposeRendererAndChildren();\n\t\t\tvar renderer = Platform.CreateRenderer(view);\n\t\t\tPlatform.SetRenderer(view, renderer);\n\n\t\t\trenderer.NativeView.Bounds = view.Bounds.ToRectangleF();\n\n\t\t\treturn renderer;\n\t\t}\n\n\t\tpublic static (UIView NativeView, VisualElement FormsElement) RealizeView(object view, DataTemplate viewTemplate, ItemsView itemsView)\n\t\t{\n\t\t\tif (viewTemplate != null)\n\t\t\t{\n\t\t\t\t// Run this through the extension method in case it's really a DataTemplateSelector\n\t\t\t\tviewTemplate = viewTemplate.SelectDataTemplate(view, itemsView);\n","sourceCodeStart":1,"sourceCodeEnd":33,"githubUrl":"https://github.com/dotnet/maui/blob/f377ff1c5ee04d334d8a925f50c83a6b7afddf03/src/Compatibility/Core/src/iOS/CollectionView/TemplateHelpers.cs#L1-L33","documentation":"TemplateHelpers.CreateRenderer throws ArgumentNullException(nameof(view)) when the View passed in is null. The helper cannot create or attach a renderer for a null element, so it fails fast rather than producing a null renderer that propagates a NullReferenceException later in the layout pipeline.","triggerScenarios":"Calling TemplateHelpers.CreateRenderer(null); typically reached when a DataTemplate returns null (e.g. a DataTemplateSelector selects a missing template) or when ItemsView.ItemTemplate binds to a null View.","commonSituations":"A DataTemplateSelector returning null for an unhandled case; an ItemTemplate where the type-creating factory returns null; x:Null set on a template; F# code constructing Views lazily and passing null on the first call.","solutions":["Audit DataTemplateSelector implementations so every branch returns a non-null DataTemplate.","Ensure ItemTemplate / DataTemplate factories always return a non-null View.","Add a null check in the caller before invoking CreateRenderer."],"exampleFix":"// before\nvar r = TemplateHelpers.CreateRenderer(view);\n// after\nif (view == null)\n    throw new InvalidOperationException(\"View returned by template was null. Check selector/template.\");\nvar r = TemplateHelpers.CreateRenderer(view);","handlingStrategy":"validation","validationCode":"if (view == null)\n    throw new InvalidOperationException(\"DataTemplate returned a null View. Review selector/template.\");\nvar renderer = TemplateHelpers.CreateRenderer(view);","typeGuard":"static bool IsValidView(View v) => v != null;","tryCatchPattern":null,"preventionTips":["Audit every DataTemplateSelector branch to return non-null.","Ensure ItemTemplate factories return non-null Views.","Null-check View before invoking CreateRenderer."],"tags":["maui","xamarin-forms","ios","datatemplate","argument-validation","renderer"],"backgroundTag":null,"analyzedSha":"f377ff1c5ee04d334d8a925f50c83a6b7afddf03","analyzedAt":"2026-08-13T14:26:18.069Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}