【发布时间】:2018-10-13 18:35:59
【问题描述】:
我有一个 objC NSDocument 子类,它本身是 Swift 版本的子类。 ObjC版本调用BOOL result=[self attemptRecoveryFromError:error optionIndex:recoveryOptionIndex];,由Swift子类实现。
从 Swift 子类中,对于某些错误,调用 super 如下:
guard let (error as NSError).domain == "someDomain" else {
return super.attemptRecovery(fromError: error, optionIndex: recoveryOptionIndex)
}
这个方法不是ObjC子类实现的,应该是NSObject实现的,但是在运行时出现如下错误:
-[App.AppDocument attemptRecoveryFromError:optionIndex:]: unrecognized selector sent to instance 0x60000350d340
为什么找不到方法?是否可能与 Error 的类型不一定是 NSError 有关?
【问题讨论】:
-
attemptRecoveryFromError:optionIndex:是一种非正式协议NSErrorRecoveryAttempting的方法,NSObject没有实现。 -
This page 另有建议。我理解错了吗?
-
是的“已实施”表示可以实施。
NSObject不知道如何恢复。见Formal and Informal Protocols 和Error Recovery。 -
@Willeke 我现在看到了。如果您将其作为答案,我可以将其标记为这样。谢谢。
标签: objective-c swift nsobject nsdocument