首页 > 解决方案 > Firebase Firestore 调用上的 Swift EXC_BAD_INSTRUCTION

问题描述

编辑:我发现它与“isLoading”以及它如何影响 UI 有关。时机刚刚使它看起来像 Firebase。

我正在将数据Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)上传到 Firestore,但在数据上传到 Firestore 之后但在回调发生之前的某个时间点收到错误消息。

发布功能在按钮点击时被调用

func post(for user: User, onSuccess: @escaping() -> Void) {
    isLoading = true
    
    let post = Post(text: message, upvotes: [user.uid:true], upvoteCount: 1, downvoteCount: 0, postDate: Date().timeIntervalSince1970, ownerId: user.uid)
    API.Post.post(post, onSuccess: {
        self.isLoading = false
        onSuccess()
    }) { (errorString) in
        self.isLoading = false
        self.errorMessage = errorString
        self.showAlert = true
    }
}

它调用我的 PostAPI 函数

func post(_ post: Post, onSuccess: @escaping() -> Void, onError: @escaping(_ errorMessage: String) -> Void) {
    let collection = FRef.FFirestore.FPosts.MY_POSTS_DOCUMENT_USERID(userId: post.ownerId).collection(FirebaseConstants.Firestore.USER_POSTS_COLLECTION)
    let postId = collection.document().documentID
    let firestorePostRef = collection.document(postId)
    
    guard let dict = try? post.toDictionary() else { return }
    
    firestorePostRef.setData(dict) { (error) in
        if error != nil {
            onError(error!.localizedDescription)
            return
        }
        
        onSuccess()
    }
}

这会成功上传数据,但永远不会到达回调。如果我在该行上放置一个断点,if error != nil即使数据已上传,它也永远不会被命中

标签: swiftswiftui

解决方案


推荐阅读