2016-01-15 4 views
2

Кажется, я не могу подклассировать Crashlytics с Swift. Мой объект Mock выглядит так:Подкласс Crashlytics

class MockCrashlytics: Crashlytics { 
    var newValue: AnyObject? 
    var newKey: String? 

    override func setObjectValue(value: AnyObject?, forKey key: String) { 
     newValue = value 
     newKey = key 
    } 
} 

Однако, если я создаю экземпляр этого класса, я получаю суперкласс.

Debugger Пример:

po MockCrashlytics() 
<Crashlytics: 0x7fff4188cb30> 

Я бы ожидать:

po MockCrashlytics() 
<MockCrashlytics: 0x7fff4188cb30> 

Когда я пытаюсь получить доступ к newValue или newKey я EXC_BAD_ACCESS.

Любые идеи?

+0

Вы собираетесь должны быть более конкретными, чем это – tbondwilkinson

+0

@tbondwilkinson: Это все есть на него, хотя. Я пытаюсь подклассировать Crashlytics, поэтому я могу издеваться над ним в своем модульном тесте. Я хочу утверждать, что мой класс вызвал метод setObjectValue.ForKey Crashlytics. Или что еще вам нужно? – scrrr

+0

Как вы получаете доступ к 'newValue' и' newKey'? Через отладчик? – tbondwilkinson

ответ

2

Очевидно, что Crashlytics не подклассы. Похоже, что какой-то механизм препятствует правильному подклассу, поэтому разработчики не вмешиваются в свой код.

Эта информация была предоставлена ​​службой технической поддержки Crashlytics/Fabric.io.

0

Вы можете создать класс-оболочку, содержащий переменную поля типа Crashlytics. Добавьте переменные newValue и newKey в класс обертки.

class crashWrapper { 

    var newValue: AnyObject? 
    var newKey: String? 
    //or whatever the correct way to init Crashlytics is 
    var crashlytics = Crashlytics() 

    override func setObjectValue(value: AnyObject?, forKey key: String) { 
     newValue = value 
     newKey = key 
    } 

} 
Смежные вопросы