首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从NSNotification继承

从NSNotification继承
EN

Stack Overflow用户
提问于 2015-02-06 00:39:53
回答 1查看 354关注 0票数 2

我想创建一个NSNotification的子类。我不想创建一个类别或其他任何东西.

您可能知道,NSNotification是一个类集群,如NSArrayNSString

我知道集群类的子类需要:

  • 声明自己的存储
  • 覆盖超类的所有初始化器方法。
  • 重写超类的基本方法(如下所述)

这是我的子类(没什么稀奇的):

代码语言:javascript
复制
@interface MYNotification : NSNotification
@end

@implementation MYNotification

- (NSString *)name { return nil; }

- (id)object { return nil; }

- (NSDictionary *)userInfo { return nil; }

- (instancetype)initWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo
{
    return self = [super initWithName:name object:object userInfo:userInfo];
}
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
    return self = [super initWithCoder:aDecoder];
}

@end

当我使用它时,我会得到一个非凡的:

代码语言:javascript
复制
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** initialization method -initWithName:object:userInfo: cannot be sent to an abstract object of class MYNotification: Create a concrete instance!'

为了从NSNotification继承,我还需要做什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-06 19:09:34

问题是试图调用超类初始化器。你不能这样做,因为这是一个抽象类。所以,在初始化器中,您只需插入您的存储。

因为这太可怕了,我最终为NSNotification创建了一个类别。在这里,我添加了三种方法:

  • 自定义通知的静态构造函数:在这里,我将userInfo配置为用作存储。
  • 方法来向存储添加信息:通知观察者将调用此方法来更新userInfo
  • 方法对观察者提交的信息进行处理:在post方法完成后,通知已经收集了所需的所有信息。我们只需要处理并归还它。如果您对收集数据不感兴趣,这是可选的。

最后,这个类别只是一个处理userInfo的助手。

谢谢@Paulw11的评论!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28356714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档