2012-10-15 38 views
0

建立一個對象的名字,我有我想用幾個對象,像obj11,obj21,obj33等iOS版 - 「NSObjectFromString」 ---從字符串

正確的對象的選擇使用取決於用戶定義的一些參數,例如:要使用的大小和對象的種類。

因此,對象名稱上的第一個數字將表示大小,第二個字母表示該類型。如果用戶選擇對象大小2和對象種類1,則要加載的對象將是「obj21」。

有沒有辦法根據它的名字引用一個對象作爲NSString?

NSString *name = [NSString stringWithFormat:@"obj%d%d", size, kind]; 
["use object name" doSomething]; 

我需要這樣的東西NSSelectorFromString,但在這種情況下,它運行基於其名稱的方法。我需要的東西就像「NSObjectFromString」,它引用基於它的名稱作爲字符串的對象。

我該怎麼做?謝謝。

回答

3

由於這是不可能的,因此將對象存儲在NSDictionary(或其可變對象)中並使用您構建的字符串作爲該對象的關鍵字會更好。

這裏有一個奇怪的例子:

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

... init your objects somehow ... 

// build your keys somehow and add the object to the dict 
int size = 1; 
int kind = 2; 

NSString *name = [NSString stringWithFormat:@"obj%d%d", size, kind]; 
[objectDict addObject:obj12 forKey:name]; 

... Do some stuff ... 

// access your object and call a method 
id obj = [objectDict objectForKey:name]; 
[obj doSomething]; 
+0

在技術上可以使用的OBJ -C的運行時間,但這將是一個矯枉過正解決方案與「NSDictionary」相比。 – atxe

+0

真的嗎?很酷,你有什麼網站參考?我很好奇。 – yinkou

+0

我都是耳朵... – SpaceDog

0

你可以讓一個工廠方法,並使用NSSelectorFromString動態調用它。

更多細節在這裏:

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html

編輯:

我的答案是什麼,我認爲是同一個問題:

id object = [[NSClassFromString(@"NameofClass") alloc] init]; 

Create objective-c class instance by name?

+0

對不起,但你正在談論我正在談論的對象的功能...... – SpaceDog

+0

他想要一個現有的對象,而不是從一個字符串中創建一個新對象。 – yinkou

+0

哦,我知道了,它是一個動態變量*名稱*! –