0

这是我的设置。我UIViewController进行了一次子类化以创建一个“小部件”视图控制器,它可以处理我所有的小部件可以做的所有事情。然后,我为我的每个小部件子类化了小部件视图控制器,因为它们每个都处理自己独特且通常复杂的功能集。

我想创建一个小部件数组,将每个活动小部件存储在我的场景中,但是我在尝试弄清楚如何初始化正确的小部件以存储在数组中时遇到了麻烦。最初我认为我可以这样做 [widgets addObject:[[Widget alloc] initWithNibName:widgetName bundle:nil]];,但是这完全忽略了单个小部件 initWithNibName 函数并直接进入抽象的 Widget 类(这是有道理的,因为这是我将其加载到的类......)。

如何将我的类正确加载到这个数组中,每个小部件都由其自己的唯一子类初始化?如有必要,也可以随意推荐结构更改。

4

3 回答 3

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];
于 2012-05-14T13:37:56.197 回答
0

好吧,而不是这样:

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

你可以这样做:

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

我的问题是,它NSMutableArray存储在哪里?

Myabe 有一个单身人士,所以你可以跟踪他们?

于 2012-05-14T13:24:45.967 回答
0

我有一个类似的问题,我在“抽象”小部件类中使用这样的函数解决了这个问题:

+ (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]];
于 2012-05-14T13:29:29.927 回答