2011-01-21 1 views
0

Большой нуб нуждается в помощи в понимании вещей., взаимодействующий с UIViews, хранящимся внутри NSMutableArray

У меня есть три 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 так легко, но, кажется, не в состоянии получить его из СГМУ tableArray любым другим способом. Я уверен, что здесь у меня отсутствуют некоторые «базовые знания», и я был бы признателен, если бы кто-то мог потратить время и объяснить, что здесь происходит, чтобы я мог, наконец, двигаться дальше. это был долгий день обучения.

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

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

спасибо всем

ответ

1

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

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

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

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

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

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

Это делает то, что вы пытаетесь сделать - это сравнение двух указателей - и не нуждается ни в faffing вокруг с Интс и т.д.

+0

Я пытаясь как-то идентифицировать UIView, а затем позже в сравнении кода, если он один и тот же. Когда я делаю NSLog (@ "регистрация полосы:% i", дорожка); Я получаю 89183264 в выходе NSLog. Для меня это уникальный номер, который говорит мне, что это UIView. У меня также есть .tag. Как я могу сохранить значение .tag в переменной? Это проще, чем значение ячейки памяти? – TrekOnTV2017

+0

См. Мой обновленный ответ с примером выше – lxt

+0

спасибо. Я соответствующим образом меняю свой подход. – TrekOnTV2017

 Смежные вопросы

  • Нет связанных вопросов^_^