2017-08-07 19 views
1

我對Objective-C的這種方法:- [_ SwiftValue unsignedIntegerValue]崩潰

- (id)userInfoForSelectedIndex { 
    if(selectedIndex < self.buttons.count) 
    return self.buttons[selectedIndex].userInfo; 
    else 
    return nil; 
} 

.userInfo應該是一個MyEnum值

typedef NS_ENUM(NSUInteger, MyEnum) { 
    ValueA  = 0, 
    ValueB 
}; 

,當我試圖運行應用程序崩潰(Objective-C code):

- (SomeEnum)activeFilter { 
    return [[MyClass userInfoForSelectedIndex] unsignedIntegerValue]; 
} 

在控制檯上輸出:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_SwiftValue unsignedIntegerValue]: unrecognized selector sent to instance 0x60800025ac10' 

有什麼建議導致崩潰?

回答

2

Enum是由一些Swift函數提供的。

問題是swift-obj-c互操作性期間的類型錯誤。我在swift函數上使用rawValue來解決它,而不是使用枚舉本身。

對象 -運行的代碼將使用該值作爲一個UINT,而不是造成鑄造EnumType(MyEnum)爲ID的返回類型上userInfoForSelectedIndex一些錯誤的迅速值類型。