[英]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.