0

大きな初心者は、物事を理解するのに助けが必要です。

NSMutableArray 内に 3 つの UIView が格納されています

lanes = [[NSMutableArray arrayWithCapacity:3] retain];

- (void)registerLane:(Lane*)lane {  
    NSLog (@"registering lane:%i",lane);
    [lanes addObject:lane];
}

私が見るNSLogで:登録レーン:89183264

NSLog (89183264) に表示される値は、私が求めているものです。その数値を変数に保存して、コードの他の場所で再利用できるようにしたいと考えています。

私が思いついた最も近いものはこれでした:

NSString *lane0 = [lanes objectAtIndex:0];
NSString *description0 = [lane0 description];
NSLog (@"description0:%@",description0);

問題は、description0 が単一の数値だけでなく、UIView オブジェクト全体を取得することです (10 進数 89183264 は 16 進数 0x550d420 です)。

description0 の内容:

description0:<Lane: 0x550d420; frame = (127 0; 66 460); alpha = 0.5; opaque = NO; autoresize = RM+BM; tag = 2; layer = <CALayer: 0x550d350>>

私が得られないのは、NSLogを使用して正しい10進数値を簡単に取得できる理由ですが、他の方法ではNSMutableArrayから取得できないようです。ここで「基本的な知識」が欠けていると確信しています。誰かが時間をかけてここで何が起こっているのかを説明して、最終的に先に進むことができれば幸いです. 勉強するのは長い一日でした。

次のような方法で 89183264 番号を簡単に保存できないのはなぜですか。

NSInteger * mylane = lane.id;
or  
NSInteger * mylane = lane;

皆さん、ありがとうございました

4

1 に答える 1

1

ビューのメモリの場所を保存したい理由について、私は本当に混乱していますか? それがあなたの「89183264」番号だからです。ポインタの位置です。通話中:

NSLog (@"registering lane:%i",lane);

...実際に何が印刷されているか分かりますか? 印刷されている数字は何を意味しますか?

特に UIView をサブクラス化している場合、選択した int を割り当てることができる素敵な .tag プロパティを既に取得している場合は特にそうです。

必要以上に人生を無限に複雑にしています。ポインターを使用するだけです。多くの UIView を含む配列があるとします。

UIView *viewToCompare = [myArray objectAtIndex:3];
for (id object in myArray) {
    if (object == viewToCompare) {
        NSLog(@"Found it!");
    }
}

それはあなたがやろうとしていることを行います - それは2つのポインタを比較します - そしてintなどをいじる必要はありません.

于 2011-01-21T04:55:46.050 に答える