2011-09-16 86 views
2

我正在開發iPad應用程序,需要一些幫助。動態實例命名

通過我的應用程序中的按鈕,我想一次創建一個對象。因此每次按下按鈕時都應該創建一個對象。

我遇到的問題是:我想爲每個對象分配一個動態名稱來標識此對象。 這將是類似於:form0,form1,form2,...,formN。

該名稱對應於每個對象內的實例變量。 因此,form1實例的數字屬性爲1.

但是,如何將此form1,form2等分配給新實例?

我試圖與一個方法的返回它創建formX字符串來初始化一個新的實例:

-(NSString*)giveMeName{ 
NSString* simpleName = @"form"; 
NSString* newName = [simpleName stringByAppendingString:[NSString stringWithFormat:@"%d", questionCounter]]; 
return newName; 

}

其中questionCounter是保持兩個formX整型標識符的變量和實例號屬性。

但是,當我想用​​這個函數初始化一個新的實例作爲命名它不工作:

TSForm* [self giveMeName] = [[TSForm alloc] initWithInt:questionCounter headline:headlineText intro:introText]; 

很顯然,我得到了一些錯誤的Objective-C的內部工作。 請幫我一把。

+0

[目標C等價於PHP的「變量變量」]的可能重複(http://stackoverflow.com/questions/2283374/objective-c-equivalent-of-phps-variable-variables) –

+0

只需填寫您的對象一個NSMutableArray或NSMutableDictionary。如果你覺得如此強迫,字典將允許你分配他們的名字。 –

回答

3

你想要做的事情不是真的可能。你可以實現你正在尋找的影響的一種方法是使用NSDictionary。對於您創建的每個TSForm對象,使用giveMeName返回值的鍵將該對象添加到字典中。

所以,你開始創建你的字典:

NSMutableDictionary *formDict = [[NSMutableDictionary alloc] init]; 

然後,每次創建一個對象,把它添加到字典:當你想拔出形式

id *newTSForm = [[TSForm alloc] init]; // Or however you create a TSForm 
[formDict setObject:newTSForm forKey:[newTSForm giveMeName]]; 

然後你正在尋找,你只是根據你提供的名字問字典:

[formDict valueForKey:nameOfForm]; // nameOfForm is the name provided by giveMeName 

希望這可以幫助!

+0

理論上,您可以使用class_addIvar來動態定義新的實例變量。這個問題(我從來沒有嘗試過)是因爲你必須在創建任何實例之前做到這一點,所以對於上述情況它是沒用的。 –

+0

謝謝,夥計。我會嘗試的! – ruffy

2

使用NSMutableArray並繼續在其中添加項目。

1

即使你想要做的事情在技術上是可行的,那就是在底層的Objective-C運行時和KVC的東西中使用tricsk等等。

使用一個簡單的NSMutableArray來跟蹤所有你的實例(並使用數組中的索引來知道你正在處理哪種形式)是一條路。

我不認爲你真的需要你的唯一標識符的東西(如果是這樣,你可能會考慮你的項目是錯誤的方式),只要你有你的代碼的方式來區分每個窗體和操作他們(第一個創建的表格將在索引0處,第二個在索引1 ...處於您的NSMutableDictionary中)

如果您真的需要這個特殊的唯一標識符,出於某種奇怪的原因,您仍然可以使用NSMutableDictionary並使用唯一標識符作爲您的詞典的關鍵字,並將表格作爲關聯值。但是你應該考慮一下你的架構和實際需求,因爲看起來很奇怪的應用程序架構/設計是基於你的問題描述你的需求。

+0

謝謝!是的,我知道我所做的並不是它應該的樣子。所以NSMutableArray或NSMutableDictionary都是我選擇的武器。 – ruffy