2012-05-14 37 views
0

這是我的設置。我將UIViewController分類爲一次,以創建一個單獨的「Widget」視圖控制器,該控制器處理所有我的小部件可以執行的所有操作。然後,我爲每個小部件分類了Widget View Controller,因爲它們各自處理它們自己獨特且通常複雜的一組功能。初始化超類數組中的UIViewController子類?

我想創建一個Widget數組,用於存儲每個活動小部件在我的場景中,但是我無法試圖找出如何初始化適當的小部件以存儲在數組中。起初,我認爲我只能做[widgets addObject:[[Widget alloc] initWithNibName:widgetName bundle:nil]];,但是它完全忽略了單個小部件的initWithNibName函數,並且直接到了抽象的Widget類(這很有道理,因爲這是我將它加載到的類)。

如何正確地將我的類加載到此數組中,並且每個小部件都由其自己的唯一子類初始化?如果有必要,請隨意推薦結構更改。

回答

2

如果類的名字是一樣的筆尖

NSArray* widgets = [NSArray arrayWithObjects: @"MyVC1",@"MyVC2",nil]; 

NSString* newVC = [widgets objectAtIndex: value]; 

Class classVC = NSClassFromString(newVC); 

Widget* controller = [[classVC alloc] initWithNibName:newVC bundle:nil]; 
+0

這工作,很容易實現,因爲我有一切正確命名。謝謝。 –

+0

很高興我能幫助,歡呼 – Nico

0

的好,而不是這樣的:

[widgets addObject:[[Widget alloc] initWithNibName:widgetName bundle:nil]]; 

你可以這樣做:

MySpecifc *mySpecificWidget = [[MySpecifc alloc] initWithNibName:widgetName bundle:nil]; 
[widgets addObject:myWidget]; 

我的問題在這裏,這是哪裏NSMutableArray保存在哪裏?

Myabe有一個Singleton所以你可以跟蹤它們嗎?

+0

我的NSMutableArray存儲在現場級,因爲當前加載的場景處理所有的小部件。問題是我不知道MySpecific在被調用的時候是什麼類,所以我不能在沒有做某種查找的情況下在我的alloc中聲明它。 –

0

我也有類似的問題,我解決了使用這樣的功能在「抽象」 Widget類問題:

+ (Widget)InstanceFor(widgetType)type { 
    switch(type) { 
     case widgetTypeWidgetOne: 
      return [[WidgetOne alloc] initWithNibName:@"WidgetOneName" bundle:nil] autorelease]; 
      break; 
     case widgetTypeWidgetTwo: 
      return [[WidgetTwo alloc] initWithNibName:@"WidgetTwoName" bundle:nil] autorelease]; 
      break; 
    } 
} 

widgetType是這樣的:

typedef enum { 
    widgetTypeOne, 
    widgetTypeTwo 
} widgetType; 

所以你可以將Widget對象存儲在數組中並在需要時進行投射。 當你想初始化一個小部件,你可以這樣做:

[widgets addObject:[Widget InstanceFor:widgetTypeWidgetOne]];