взаимодействуя с UIViews, хранящимися внутри NSMutableArray - PullRequest
0 голосов
/ 21 января 2011

большому нубу нужна помощь в понимании вещей.

У меня есть три UIViews, хранящиеся внутри NSMutableArray

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, а не только одно число (декабрь 89183264 - это шестнадцатеричное 0x550d420)

содержание description0:

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

что я не получаю, поэтому яполучить правильное десятичное значение с помощью NSLog так легко, но, похоже, невозможно получить его из NSMutableArray любым другим способом.Я уверен, что мне здесь не хватает некоторых «базовых знаний», и я был бы признателен, если бы кто-то нашел время и объяснил, что здесь происходит, чтобы я наконец смог двигаться дальше.это был долгий учебный день.

почему я не могу легко сохранить номер 89183264 с помощью чего-то вроде:

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

спасибо всем

1 Ответ

1 голос
/ 21 января 2011

Я действительно запутался, почему вы хотите сохранить место в памяти вида?Потому что это ваш номер 89183264.Это местоположение указателя.Когда вы звоните:

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

... вы получаете то, что на самом деле там печатается?Что означает напечатанное число?

Кажется, это действительно плохая идея, особенно если у вас есть подкласс UIView, у вас уже есть прекрасное свойство .tag, которое вы можете назначить int по вашему выбору.

Вы делаете жизнь бесконечно более сложной, чем она должна быть.Просто используйте указатель.Скажем, у меня есть массив, содержащий множество UIViews:

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

, который делает то, что вы пытаетесь сделать - он сравнивает два указателя - и не нуждается в каких-либо переходах с помощью целых и т. Д.

...