2011-08-22 29 views
0

我想使用NSClassFromString()來傳遞一個字符串,以便確定哪些類被壓入導航控制器。問題是,我想傳遞一個值給這個類,這會導致一個錯誤,以及嘗試推視圖控制器導致錯誤,因爲NSObject不是一個UIViewController類型的類。Objective-C:NSClassFromString()與導航控制器一起使用?

Class screenClass = NSClassFromString(screen.name); 
NSObject* newClass = [[screenClass alloc] init]; 
newClass.asset = asset; // Causes errors because asset not in NSObject 
[self.navigationController pushViewController:newClass animated:YES];// newClass is an NSObject 
[newClass release]; 

有沒有更好的方法來做我在這裏嘗試的?

回答

1

如果您不能靜態輸入變量,則不能使用點符號。如果所有可能的類都從一個聲明該方法的公共類中下來,那麼可以將它靜態地鍵入爲該類。否則,你就需要使用存取方法爲asset屬性:

Class screenClass = NSClassFromString(screen.name); 
id newClass = [[screenClass alloc] init]; // note that it's an id to indicate that we don't know what it'll be more specifically than an object 
[newClass setAsset:asset]; 
[self.navigationController pushViewController:newClass animated:YES]; 
[newClass release]; 

這假定爲asset屬性的setter是setAsset:(它通常會)。

+0

現在這就是我正在談論的!完美工作! –

2

你可以簡單地做

UIViewController *newObject = (UIViewController *)[[screenClass alloc] init]; 

然後警告將被刪除。

+0

這個,或者使用 - setAsset:方法代替屬性。 –

相關問題