mea*_*ers 5 exception nsfetchedresultscontroller ios swift swift4
我有以下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)")
}
}
}
Run Code Online (Sandbox Code Playgroud)
其中ObjC是一个 Objective-C 类(来自此处)。这是.h:
#import <Foundation/Foundation.h>
@interface ObjC : NSObject
+ (BOOL)catchException:(void(^)())tryBlock error:(__autoreleasing NSError **)error;
@end
Run Code Online (Sandbox Code Playgroud)
还有.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
Run Code Online (Sandbox Code Playgroud)
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,目前无法更新(因为它是一个遗留项目)。
| 归档时间: |
|
| 查看次数: |
1070 次 |
| 最近记录: |