1

1つのことについていくつかのヒントが欲しいです:

tableview 列にバインドされた配列には、いくつかの数値 (float) 値があります。これらの値は、「0」、「1」、「2」などのラベルが付いたインターフェイス ボタンを使用して入力 (配列に配置) されます。入力をキャンセルする「C」ボタンもあります。

後で、この配列を使用していくつかの計算を行います。結果が入力されていない場合、配列のオブジェクトを 0 にすることはできません。「値なし」は確かに「nil」の方が適切に表されますが、nil オブジェクトを配列に挿入することはできません (nil は「配列の終わり」を意味します)。

NSArray にはオブジェクトが含まれます。つまり、ここでは、これらのオブジェクトは NSNumbers でなければなりません。[NSNumber numberWithDouble:…] double を入力して配列を初期化できますか? ここに nil を入れることはできません!

真の NSArray には「穴」は含まれません (できません)。しかし、たとえば、3 番目の項目が値を受け取っていない場合は、そうする必要があります。どうやって:

NSNumber に「未定義」の値を実装しますか? 「C」ボタンで以前に入力した結果を消去しますか?

解決策があるはずです。ApplescriptObjC では、トリックを使用しました。タイトルを使用して、すべてのボタンによって呼び出されるメソッドで帰属を行いました。

 if sender's title as string is "C" then
 set item theRow of gResult to missing value -- the row was the selected line, gResult was a AS list.
 else
 set item theRow of gResult to sender's title as real
 end if

ここで何をすべきですか?- 特別な値 (-1 など) を選択して未定義の値を示し、NSPredicate を使用して配列をフィルタリングしますか? -特別な値が何かであり、セルに表示されるため、セルを「何もない」にするにはどうすればよいですか(でも)

この問題にはエレガントな解決策があると確信しています。でも今のところ、残っている髪の毛を引きちぎるだけです…</p>

助けてくれてありがとう…</p>

4

3 に答える 3

3

NSNull オブジェクトを追加して、null 値を表すことができます。

于 2012-05-12T18:36:53.623 に答える
2

NSArray は常にオブジェクトを含む必要があります。nil は配列の終わりを示すフラグです。したがって、nil 値をオブジェクトとして表すには、次のように NSNull を使用する必要があります。

[NSNull null]
于 2012-05-12T18:55:30.917 に答える
0

NSArray には「識別された」オブジェクトが必要です。その際立ったオブジェクトが表示されると、コードは別のことを行います。このような「識別された」オブジェクトは、「センチネル」と呼ばれることが多く、何でもかまいません。例えば:

static NSNumber *theSentinel;

/* initialize theSentinel somewhere with */
theSentinel = [NSNumber numberWithFloat: <anyfloat-doesnt'-matter-which>];

次に、コードで:

NSNumber *selection = [NSArray objectAtIndex: <user selection>];

if (selection == theSentinel) { /* something */ }
else { /* main */ }

そして、述語で使用できます(コードではなく言葉で):

predicate = (obj NOT EQUAL theSentinel) AND (rest of your predicate based on float)
于 2012-05-12T18:49:07.060 に答える