类型MCSessionState不符合协议' AnyObject'

时间:2014-06-08 19:26:16

标签: ios swift

我使用以下代码收到此错误:

var dict: Dictionary<String, AnyObject> = [
    "peerID": peerID,
    "state": state
]

我使用MultipeerConnectivity:peerID属于MCPeerID类型(例如,MCPeerID(displayName: "morpheus")),状态是MCSessionState(枚举,例如MCSessionState.Connected)。显然,我无法将枚举转换为AnyObject?我该如何解决这个问题?

最佳。

编辑:我尝试使用Dictionary&lt; String,Any&gt;,但现在我在下次调用时遇到异常。这是代码:

func session(session: MCSession!, peer peerID: MCPeerID!, didChangeState state: MCSessionState) {

    var dict: Dictionary<String, Any> = [
        "peerID": peerID,
        "state": state
    ]

    NSNotificationCenter.defaultCenter().postNotificationName(
        "MCDidChangeStateNotification",
        object: nil,
        userInfo: dict
    )
}

Xcode表示&#34; userInfo:dict&#34;除了以下行:

Thread 10: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

也许这不会告诉你什么,所以我可以发布哪些内容会有所帮助?

编辑:

通过在运行时检查对象(崩溃后),这就是我得到的:

state   MultipeerConnectivity.MCSessionState    Connecting  Connecting
dict    Swift.Dictionary<Swift.String, protocol<>>      
    [0] Swift._DictionaryElement<Swift.String, protocol<>>      
         key    Swift.String    "state" 
             core   Swift._StringCore       
         value  protocol<>      
             payload_data_0 Builtin.RawPointer  0x0 
             payload_data_1 Builtin.RawPointer  0x0 
             payload_data_2 Builtin.RawPointer  0x0 
             instance_type  Builtin.RawPointer  0x0 

那里似乎有一些空指针,但是&#34;状态&#34;变量似乎很好......

注意:我注释掉了peerID分配。

3 个答案:

答案 0 :(得分:3)

AnyObject仅适用于班级类型,使用Any也支持枚举(参见docs)。

答案 1 :(得分:2)

  

显然,我无法将枚举转换为AnyObject?我该如何解决这个问题?

这是正确的,AnyObject不能包含枚举。

  

我尝试使用Dictionary<String, Any>,但现在我在下一次调用时遇到异常。

NSNotificationCentre没有采取快速Dictionary,需要NSDictionary

只要有可能,DictionaryNSDictionary可互操作,但NSDictionary只能将对象作为键和值。您无法在字典中使用Any,因为NSDictionary等对象API需要将其视为NSNotificationCentre

因此,长话短说,通知userInfo字典必须是Dictionary<AnyObject, AnyObject>(或<String, String>或某个对象的东西。你将不得不使用Enum以外的东西。

答案 2 :(得分:1)

我认为您需要使用类型Any作为字典值(因为AnyObject只能用于类的实例):

这在我的操场上工作:

var dict: Dictionary<String, Any> = [
    "peerID": peerID,
    "state": state
];