簡體   English   中英

Swift EXC_BAD_ACCESS具有損壞的對象?

[英]Swift EXC_BAD_ACCESS with a corrupted object?

由於某些奇怪的原因,我遇到了EXC_BAD_ACCESS ,特別是在展開和引用字段時。 (可在Xcode 7 GM上重現。)

以下是相關代碼:

// FIXME: BUGGY
let conv_id = client_conversation.conversation_id //!.id
print("ABOUT TO DIE: \(conv_id?.id)")
if conv_id!.id as? String != nil {
    conv_id!.id = "hi"
}

它在print()語句時崩潰。 不知道我能做些什么來解決這個問題。 我已經嘗試了malloc()調試,Zombie對象和通過backtrace進行手工調試。

我添加了這些對象的定義:

class Message : NSObject {
    required override init() {
        super.init()
    }
}

class CONVERSATION_ID : Message {
    var id: NSString = ""
}

class CLIENT_CONVERSATION : Message {
    var conversation_id: CONVERSATION_ID?
    var type = ConversationType()
    var name: NSString?
    var self_conversation_state = CLIENT_CONVERSATION_INTERNAL_STATE()
    var read_state = [CLIENT_CONVERSATION_READ_STATE]()
    var current_participant = [USER_ID]()
    var participant_data = [CLIENT_CONVERSATION_PARTICIPANT_DATA]()
}

另一個示例問題:while print(conv_id!)打印

(
    "sample string"
)

我似乎無法直接訪問該字符串。

任何時候你說! 您正在邀請當機。 重寫您的代碼,以便! 永遠不會出現。 知道您的可選配件,並安全地拆開它們中的每一個。 了解如何在展開之前將Optional與nil比較,或如何使用if let構造。

另外,請注意,這行完全是胡說八道(我稱之為“錯誤的演員表”):

if conv_id!.id as? String != nil {

NSString 始終是字符串; 我很驚訝編譯器沒有警告您這一點。 因此,測試毫無意義。

因此,您的代碼應如下所示:

let conv_id = client_conversation.conversation_id
conv_id?.id = "hi"

請注意,沒有錯誤的強制轉換和感嘆號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM