2

セットにNSSetwithがあり、次のようにインスタンス メソッドを使用してチェック@"x"しようとしています。member:

NSSet *everythingOnStack = [[NSSet alloc] initWithObjects:program, nil];
NSSet *variablesOnStack =  [[NSSet alloc] initWithObjects:([everythingOnStack member:@"x"]),nil];   

NSLog(@"Variables on, %@",variablesOnStack);
NSLog(@"Everything on stack,%@",everythingOnStack);

member:メソッドが を認識していないようで、その理由がわかりません@"x"。以下はNSLog()出力です。ドキュメントを読んだところ、うまくいくはずです。混乱している。

2012-05-21 20:43:07.902 Calculator[21589:f803] Variables on, {(
)}
2012-05-21 20:43:07.904 Calculator[21589:f803] Everything on stack,{(
    (
    1,
    2,
    x,
    "+"
)
)}

私は、スタンフォードのオンライン クラスを通じて、Objective C を学んでいます。

4

2 に答える 2

3

文字列@"x" のメンバーではありませんeverythingOnStack。これは、あらゆる種類のコレクションのメンバーprogramです (配列のように見えます)。[everythingOnStack member:@"x"]すると(ちなみに括弧は必要ありません)、元にnil戻るので、 の空のセットになりvariablesOnStackます。

から@"x"抜け出すeverythingOnStackには、program配列からそれを取得する必要があります。

[[everythingOnStack member:program] objectAtIndex:3]

これには、必要なオブジェクトが配列内のどこにあるかを知る必要があることに注意してください。それがあなたの設計にどのように影響するかはわかりません-おそらくRPN計算機を実装しているように見えますか?

于 2012-05-22T02:19:54.477 に答える
1

[[NSSet alloc] initWithObjects:program, nil]; という行が何をするのか誤解しているように思えます。これにより、配列「プログラム」という1つのオブジェクトがセットに追加されますが、「プログラム」内の各オブジェクトがセットに追加されるわけではありません。配列の各メンバーをセットに追加する場合は、NSSet *everythingOnStack = [NSSet setWithArray:program]; を使用できます。

このようにすると、「x」がセットのメンバーになります。ただし、一意のセット (すべてのセットがそうであると思います) を取得するため、「プログラム」に同じ番号が 2 回あった場合、そのセットには 1 回しか表示されません。

于 2012-05-22T05:29:12.233 に答える