【问题标题】:Objective-C method returning a dictionary of Class crashes in Xcode 10.2在 Xcode 10.2 中返回类崩溃字典的 Objective-C 方法
【发布时间】:2019-04-02 13:03:08
【问题描述】:

在将 Xcode 更新到 10.2 后,我遇到了奇怪的崩溃。我有一个如下的Objective-C类方法

@interface Car: NSObject 

+ (NSDictionary<NSString *, Class>  *) carMapping;

@end

返回NSDictionary&lt;NSString *, Class&gt; 类型的字典,如下所示

@implementation Car

+ (NSDictionary<NSString *, Class>  *) carMapping {
    return @{
        @"BMW": [BMWCar class],
        @"Mercedes": [MercedesCar class],
        @"Toyota": [ToyotaCar class],
        @"Tesla": [TeslaCar class]
        };
}

@end

我在 Swift 中使用这个 Objective-C 方法

let carMapping = Car.carMapping()
print(carMapping)

与 Xcode 10.1 完美配合。

但在将 Xcode 更新到 10.2 后,应用程序在第 1 行显示 Thread 1: EXC_BAD_ACCESS (code=1, address=0x0) 崩溃。我没有任何线索。

我无法控制班级Car。我将如何处理这种情况?

【问题讨论】:

  • 实际上该函数签名表示它返回一个字典,而不是字典数组。您应该将 carMapping() 方法的主体以及整个接口发布到您的 Car 类。
  • @DuncanC,对不起!我写这个问题时不好。已更正
  • 在 Objective-c 中你是如何调用 carMapping 的?你清理项目并重建它了吗?
  • @E.Coms 是的。尝试了我能做的一切。我没有在 Objective C 中调用 carMapping,而是在 Swift 类中调用。
  • 这仍然不是字典数组。您的函数返回[String: Class] 类型的字典。

标签: ios objective-c swift xcode xcode10.2


【解决方案1】:

如果你想在 swift 中轻松使用类,只需将接口中的签名从 Class 更改为 id。在实现中,您无需更改。

 @interface Car : NSObject
 + (NSDictionary<NSString *, id>  *) carMapping ;
 @end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多