我有以下NSFetchedResultsController
扩展程序:
extension NSFetchedResultsController
{
func tryObjectAtIndex(_ indexPath: IndexPath) throws -> AnyObject // ERROR HERE
{
do
{
try ObjC.catchException
{
return self.object(at: indexPath) // CAUSE
}
}
catch
{
print("An error ocurred: \(error)")
}
}
}
其中ObjC
是Objective-C类(来自here)。这是.h
:
#import <Foundation/Foundation.h>
@interface ObjC : NSObject
+ (BOOL)catchException:(void(^)())tryBlock error:(__autoreleasing NSError **)error;
@end
.m
:
@implementation ObjC
+ (BOOL)catchException:(void(^)())tryBlock error:(__autoreleasing NSError **)error
{
@try
{
tryBlock();
return YES;
}
@catch (NSException *exception)
{
*error = [[NSError alloc] initWithDomain:exception.name code:0 userInfo:exception.userInfo];
return NO;
}
}
@end
在tryObjectAtIndex
出现错误Extension of a generic Objective-C class cannot access the class's generic parameters at runtime
。
相关问题'How to write an extension for NSFetchedResultsController in Swift 4'的唯一答案建议在功能前添加@objc
。但是在上面的代码中,这没有任何区别。
调用self.object(at:)
会导致此问题。但实际上,如果没有Objective-C异常处理,只需return self.object(at: indexPath)
作为函数体,就不会发生错误。
如何解决此问题?
重要提示:我现在处于Xcode 8.3.2并且目前无法更新(因为它是遗留项目)。