- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我正在使用套接字编程。我只是想澄清与我从 - mobileorchard.com - Chatty 下载的代码相关的疑问。 .在研发时,我在 ChatRoomViewController.m 文件中看到了一个函数调用
[chatRoom broadcastChatMessage:input.text fromUser:[AppConfig getInstance].name];
当我在Room.m文件中看到,上面调用的实现;这是
- (void)broadcastChatMessage:(NSString*)message fromUser:(NSString*)name
{
// Crude way to emulate an "abstract" class
[self doesNotRecognizeSelector:_cmd];
}
根据Apple,我用谷歌搜索“doesNotRecognizeSelector:”它用于错误处理,声明“只要对象收到它无法响应或转发的 aSelector 消息,运行时系统就会调用此方法。”我的问题是,为什么开发人员调用 broadcastChatMessage:fromUser: 函数(如果它在那里没有用)并处理哪个方法的“未找到选择器”异常?
根据 Stackovrflow ,它用于创建抽象类,根据这个 Question ,它可以避免“不完整的实现”警告。
我仍然不明白为什么在 Chatty Code 中使用该方法,请帮助我理解使用该方法的原因。
最佳答案
这是存在于每个 NSObject
派生对象上的方法,当在运行时调用中无法识别方法时,它会触发异常路径。例如,如果您尝试向名为 -foo
的 NSString
发送消息,它会在那里结束,因为这不是 NSString
.
在这种情况下,Chatty 类
Room
是一个从不直接使用的基类。 LocalRoom
和 RemoteRoom
派生自它,并且这两个类都提供了 -broadcastChatMessage:fromUser
的重写实现。没有人调用该基类版本,但为了“完整性”,程序员保证子类必须通过实现该方法来覆盖它,然后转身调用它来触发异常。
事情是,这不是特别惯用的 Objective-C。 “抽象”类是来自 C++ 和其他语言的概念;它是仅作为子类化的“模式”存在的基类。 (在 ObjC 中,这通常是通过在没有有意义的状态时创建正式的
@protocol
来完成的,因为(大部分)不在这里)。
请注意,对
-doesNotRecognizeSelector:
的调用是任意的。这里没有必要避免编译器警告(因为该方法实际上已实现),原作者可以很容易地直接抛出异常,或者什么都不做。
关于iphone - 为什么我们调用 doesNotRecognizeSelector : method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15893996/
我有一个简单的循环: for(Object_ *obj in not.object) { ...... Object *objStor = [NSEntit
我在使用 CAKeyframeAnimation 时遇到了一个奇怪的错误,奇怪的部分是“SwiftDeferredNSArray doubleValue”,为什么我在处理关键帧动画时会得到它? 我得到
我的应用程序因以下错误而崩溃: -[__NSCFDictionary length]: 无法识别的选择器发送到实例 0x1786694002014-08-08 16:24:14.397 TestAPP
Fabric 告诉我很多用户在我的应用程序中遇到以下崩溃 如果展开,我会看到以下堆栈 Fatal Exception: NSInvalidArgumentException 0 CoreFoun
我有一个“doesNotRecognizeSelector”异常,我怀疑我的解压器可能返回不可变数组而不是可变数组。我对吗 ?我应该如何正确地归档和归档? (异常(exception)的地方是show
我正在使用套接字编程。我只是想澄清与我从 - mobileorchard.com - Chatty 下载的代码相关的疑问。 .在研发时,我在 ChatRoomViewController.m 文件中看
这是崩溃报告,不知道为什么。我使用 AFHTTPRequestOperation setCompletionBlockWithSuccess:failure: 调用电话。在完成 block 中,我得到
是否有等效的或黑客可以捕获 Java 中未实现的方法调用,就像我们可以在 Objective C 中使用 doesNotRecognizeSelector 所做的那样。我正在寻找一种方法,让对象在方法
应用程序有时会因 [NSObject(NSObject) doesNotRecognizeSelector:] 而崩溃,选择器为 [UIImageView setImage:]。 我通过设置异常断点捕
简短描述:当调用肯定有此方法的对象上的方法时,我得到 doesNotRecognizeSelector 错误,它发生在调用 respondsToSelector 之后。 这是一个非常奇怪的情况,我不明
我记录了我的应用程序崩溃,但我应用程序的最后一行 (5 Control) 仅指向方法 begin。我怎么知道问题出在哪一行? 0 CoreFoundation 0
我正在使用OCMock尝试测试 NSURLConnection 的行为。这是不完整的测试: #include "GTMSenTestCase.h" #import @interface HttpTe
我在看起来像是来自 AVPlayerItem 的回调中遇到了崩溃。我这样设置通知: if (queuePlayer==nil) { queuePlayer = [[AVQueuePlayer
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 7 年前。 Improve
我对 iPhone 编程完全是个菜鸟,而且我遇到过抛出异常的情况,但我无法理解。 背景:错误发生在自定义 subview 中,并且在加载程序后立即发生。我在重写的drawRect方法中抛出异常。抛出错
尝试了很多方法,还是没有结果。 因此,我在 UIViewController 的子类中以编程方式创建了以下按钮: rightButton = [UIButton buttonWithType:
有人知道为什么我会从 ibtool 中遇到此崩溃吗? ibtool --generate-strings-file "my.strings""myViewController.xib" 结果: 201
我在尝试设置float 的属性时不断收到错误消息。 我有一个 Download 类的 NSObject,它有一个原始的 float。当类下载更新进度所需的文件时,从 NSURLSessionDownl
这很奇怪,我可以使用 Xcode 5 (5A1413) 在模拟器、iPhone 4S 和 iPhone 5 中运行我的应用程序而没有任何问题,但是当我将应用程序提交到 iTunes 商店时被拒绝并且此
我正在使用 Crashlytics 来检测我的应用中的崩溃。我偶尔会收到以下崩溃报告。 关键的崩溃点是 -[NSObject(NSObject) doesNotRecognizeSelector:]
我是一名优秀的程序员,十分优秀!