2

コア データに属性 eventName、eventDate、eventLocation を持つイベント エンティティがあります。キー eventDate に SortDescriptors を使用しています。ここで問題が発生しました。キーとしてではなく、場所に基づいて並べ替える必要がある場所の設定を設定する必要があります。値..例として、シアトルの場所を持つすべてのイベントが最初に表示されるよりも、場所が「シアトル」に設定されているとします.FetchControllersでそれを行う方法を知っていますか..答える前に質問を読んでください

欲しくない

[NSSortDescriptor sortDescriptorWithKey:@"eventLocation" ascending:YES];

しかし、何かのような

[NSSortDescriptor sortDescriptorWithKey:@"eventLocation==Seattle" ascending:YES];

(これは間違っていますが、これが述語形式であることはわかっています)

4

1 に答える 1

1

@sheetal、あなたの状況は、連絡先が姓の昇順でソートされて表示される iPhone の電話アプリに似ていますが、# は最後 (Z の下) に表示する必要があります。つまり、最初に AB ... Z が必要で、次に # が必要です。

ちなみに、# は、@myHome、133isACat、#puppy など、他の文字で始まる姓を表します。セクションを取得するには、lastNameInitial という新しい Transient 属性を作成し、それを SectionNameKeyPath としてフィードします。isLastNameNumeric (以下で定義) が YES の場合、lastNameInitial = @"#" を割り当てます。または、A、B などの姓の最初の文字を lastNameInitial に割り当てます。

ソート記述子配列で単一のソート記述子、つまり姓の昇順に基づくソート記述子を使用する場合、A の前に # が先になります。これを回避するには、isLastNameNumeric (BOOL) という一時的な属性を定義します。 「通常の」姓 (AB ... Z で始まる) の場合は 0、@myHome などのその他すべての場合は 1 です。isLastNameNumeric Ascending に基づいて別のソート記述子を作成し、それを配列の最初のソート記述子として配置します。姓の昇順ソート記述子を 2 番目のソート記述子にします。これにより、姓に従ってサブソートが実行されます。

繰り返しますが、isLastNameNumeric Ascending に基づくソート記述子は、目に見えないヘルパーとしてのみ使用されます。

同様のソリューションが機能します。ただし、eventLocation が変更される可能性がある (常にシアトルであるとは限らない) 場合、このソリューションの実装はより複雑になる可能性があります。

AB ... Z を最初に表示してから # を表示するため、または @sheetal の状況のた​​めに、誰かがより良いアイデアを持っている場合、私はすべて耳にします。

于 2014-02-18T11:08:13.377 に答える