2011-06-17 73 views
0

有沒有辦法將NSString的內容用作NSArray指針名稱?這是可能的,這是不可用,但也許有另一種方法是這樣的:使用NSString內容作爲NSArray名稱

NSString*[email protected]"hi"; 
NSString*[email protected]"yo"; 

NSArray*testarray=[[NSArray alloc] initWithObjects:one, two, nil]; 

NSLog(@"actual count: %i", [testarray count]); 

NSString*[email protected]"testarray"; 
NSLog(@"test count: %i",[ --insert here to get array name from testname-- count]); 

我已經嘗試了各種猜測什麼,我可以在裏面插入用我testname作爲數組名計數操作,但沒有骰子。我知道這有點奇怪,但我可以預見很多有用的理由,我現在正在另一個應用中。

回答

1
NSString*[email protected]"hi"; 
NSString*[email protected]"yo"; 

NSDictionary *testDic=[NSDictionary dictionaryWithObjectsAndKeys: 
       [NSArray arrayWithObjects:one, two, nil], 
       @"testarray" ,nil]; 

NSLog(@"actual count: %i", [testarray count]); 

NSString*[email protected]"testarray"; 
NSLog(@"test count: %i",[[testDic objectForKey:testname] count]); 
+0

我認爲這樣做。我會試試看。 – johnbakers

0

我不知道這是否是你所需要的,但是......

您可以通過它的名字調用方法:

NSString *methodName = @"..."; 
SEL selector = NSSelectorFromString(methodName); 
[objectRef performSelector:selector]; 

此方法可能返回參考您的陣列。它應該以這種方式工作。

+0

這是一條可行的路線,但這樣很費錢:我想你會用KVC來取得一個更好的性能(因爲它是爲此設計的),你不覺得嗎? – AliSoftware

2

您可以對此使用鍵值編碼(請參閱Key Value Coding Programming Guide)。

不管怎麼說,做這種類型的代碼 - 就像你的問題一樣 - 通常是一個糟糕的設計。如果你需要這樣做,你應該考慮檢查你的代碼設計(這可能在一些罕見的情況下是唯一的方法,但至少如果你需要這樣做,你應該首先檢查它是唯一的解決方案)

使用KVC對於將值綁定到您的模型或特定的類似東西是非常有用的,但如果您可以避免和使用直接的ivars/@屬性,通常不是首選的方法。

+0

謝謝,我會檢查一下。我喜歡ZhangChn提供的解決方案。 – johnbakers