0

私はSub- としてRadioGroup非常に多くの を持っています:RadioElementsDialogViewController

Root.Add(
    new Section() {
        new RootElement ("Demo", new RadioGroup ("demogroup", 0)) {
            new Section () {
                from demoItem in bigItemList
                    select (Element) new RadioElement (demoItem)
            }
        }
    }
);

このネストされた DVC の検索を有効にして、正しい選択をRadioElementより簡単にしたいと考えています。RootElementそのため、グループの受け渡しと DVC の作成を組み合わせたカスタムを実装し、EnableSearch上記の代わりに使用しました。

using System.Collections.Generic;

namespace MonoTouch.Dialog
{
    public class SearchableRootElement : RootElement
    {
        public SearchableRootElement(string caption, Group group) : base(caption, group)
        {
            this.createOnSelected = x => {
                return new DialogViewController(x) { EnableSearch = true }; 
            };
        }
    }
}

残念ながら、サブ DVC の検索バーに入力すると、次のクラッシュが発生します。

Unhandled Exception:
System.NullReferenceException: Object reference not set to an instance of an object
  at MonoTouch.Dialog.RadioElement.GetCell (MonoTouch.UIKit.UITableView tv) [0x00019] in /Developer/MonoTouch/Source/MonoTouch.Dialog/MonoTouch.Dialog/Elements.cs:1066 
  at MonoTouch.Dialog.DialogViewController+Source.GetCell (MonoTouch.UIKit.UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath) [0x00029] in /Developer/MonoTouch/Source/MonoTouch.Dialog/MonoTouch.Dialog/DialogViewController.cs:341 
  at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)
  at MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0004c] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38 
  at Demo.iOS.Application.Main (System.String[] args) [0x00001] in /Users/rodjatrappe/Projects/Claas/Dev/Apps/Demo.iOS/Main.cs:16 
2013-06-22 14:15:02.296 DemoiOS[547:21b03] Unhandled managed exception: Object reference not set to an instance of an object (System.NullReferenceException)
  at MonoTouch.Dialog.RadioElement.GetCell (MonoTouch.UIKit.UITableView tv) [0x00019] in /Developer/MonoTouch/Source/MonoTouch.Dialog/MonoTouch.Dialog/Elements.cs:1066 
  at MonoTouch.Dialog.DialogViewController+Source.GetCell (MonoTouch.UIKit.UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath) [0x00029] in /Developer/MonoTouch/Source/MonoTouch.Dialog/MonoTouch.Dialog/DialogViewController.cs:341 
  at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)
  at MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0004c] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38 
  at Demo.iOS.Application.Main (System.String[] args) [0x00001] in /Users/rodjatrappe/Projects/Claas/Dev/Apps/Demo.iOS/Main.cs:16 

クラッシュする理由と、上記の機能をアーカイブする方法を教えてください。

4

2 に答える 2

0

直接的な回答はできませんが、(ソースがこれと同期していないと仮定して) Line 1066 を確認してみてください -

https://github.com/migueldeicaza/MonoTouch.Dialog/blob/master/MonoTouch.Dialog/Elements.cs

if (!(root.group is RadioGroup))

ルートは null ですか? MTD ソース コードをダウンロードしてデバッグすることを検討し、DVC の作成方法を確認してください。

LINQ をいくつかのハードコードされたセクションに置き換えることもできます。それが問題ではないことを確認してください。

お役に立てれば

于 2013-06-24T14:06:10.063 に答える
0

ここのバグ レポートには、発生している問題の根本的な原因の回避策が含まれていますが、フィルタが適用された後でも、フィルタによって n 番目の要素が選択済みとしてマークされるというユーザビリティの問題がどのように発生するかについても説明しています。

https://github.com/migueldeicaza/MonoTouch.Dialog/issues/203

コア MTD コードを更新したくない場合は、独自の UIBarSearchDelegate に配置することで同じ手法を使用できます。残念ながら、デフォルトの SearchDelegate クラスは内部クラスであるため、デリゲートにすべてのコードを追加する必要があります。MTDソースを変更せずにこれを実行して動作させることができました:

    public override void LoadView()
    {
        base.LoadView();
        ((UISearchBar)TableView.TableHeaderView).Delegate = new MySearchBarDelegate(this);
    }

そして、基本メソッドの代わりにこれを使用します。

public override void TextChanged (UISearchBar searchBar, string searchText)
{
    container.PerformFilter (searchText ?? "");
    foreach (var s in container.Root)
        s.Parent = container.Root;
}
于 2014-09-28T15:58:50.827 に答える