我正在尝试在Objective-C中实现一个简单的观察者/侦听器模式。

我有两个NSMutableArray,其中一个正在监听不同的类。这些被设置为通用类型(id)。我也有一个数组,其中包含不同类的名称(如NSStrings)。

我如何才能采用泛型类型,将其转换回原始类并向该类发送消息?

我已经尝试过类似的方法,但是没有成功:

// _observers_type contains the names for the classes, _observers are the generic types.
- (void)notifyObservers;
{
    for (int i = 0; i < [_observers count]; i++) {
        NSString *classNameStr = [_observers_type objectAtIndex:i];
        Class theClass = NSClassFromString(classNameStr);
        (theClass)[[_observers objectAtIndex:i] triggerNotify];
    }
}


还要注意,这些方法不是实例方法。我想用这种模式更新视图等。

最佳答案

试试这个代码

for (int i = 0; i < [_observers count]; i++) {
    [[_observers objectAtIndex:i] performSelector:@selector(triggerNotify)];
}


theClass是在运行时评估的,因此对于编译器,此行

(theClass)[[_observers objectAtIndex:i] triggerNotify];


具有与此相同的信息

[[_observers objectAtIndex:i] triggerNotify];


它将生成错误“选择器'triggerNotify'的未知实例方法”。

叫这个

[[_observers objectAtIndex:i] performSelector:@selector(triggerNotify)];


向接收者发送相同的消息,但不询问编译器是否可能。

关于ios - 泛型转换为类。在Objective-c中实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21893177/

10-13 01:56