2011-01-21 52 views
0

UIViews交互的大菜鳥需要幫助理解的事情。存儲內的NSMutableArray

我有存儲裏面的NSMutableArray

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

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

中的NSLog我看到三個UIViews:註冊車道:89183264

中的NSLog(89183264)所顯示的數值是我追求的。 我希望能夠保存這個數字在一個變量,以便能夠在代碼的其他地方重複使用。

我能想出是最接近這個:

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

的問題是,description0獲得了整個的UIView對象,不只是單一的數字(DEC 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的那麼容易,但似乎無法把它弄出來的NSMu的tableArray任何其他方式。我相信我在這裏錯過了一些「基本知識」,如果有人能花時間解釋一下這裏發生的事情,我可以終於繼續前進。這是一個漫長的一天學習。

爲什麼我不能輕易保存89183264號喜歡的東西:

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

謝謝大家

回答

1

我來真的很困惑,爲什麼你要保存的視圖的存儲位置?因爲這就是你的'89183264'號碼。這是指針的位置。當你在呼喚:

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

...你得到實際上被打印出什麼呢?打印的號碼是什麼意思?

這似乎是一個非常糟糕的主意,尤其是當如果你繼承的UIView你已經有了它,你可以指定你選擇的一個int可愛.TAG屬性。

你讓生活遠比它需要更復雜。只需使用一個指針。說我有一個包含大量UIViews數組:

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

那請問你想要做什麼 - 它比較兩個指針 - 並且不需要任何與整數各地faffing等

+0

我試圖以某種方式識別UIView,然後在代碼中比較它們是否相同。當我做NSLog時(@「註冊車道:%i」,車道);我在NSLog輸出中獲得了89183264。對我來說這是一個獨特的數字,告訴我它是哪個UIView。我也有.tag分配。那麼我會如何將.tag值保存在一個變量中呢?它比內存位置值更容易嗎? – TrekOnTV2017 2011-01-21 05:35:18