0

在我的应用程序中,我有一个带有 tableview 的视图控制器,当它加载时,它给了我大约 12 个同时出现的内存错误,所有这些错误都在我尝试从我的自定义数组中删除元素的地方。下面是相关代码

在加载表的视图控制器中,我访问了如下方法

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{

    //Some Code 

    arrangeTableObject.arrangetableSectionsInOrderForNoteType(withFrameId:tableDataSection.frameId.uintValue)

   //Some code
   return cell
}

在我的另一个 swift 类中,arrangeTableObject.swift 这就是我使用这些方法的方式

//My custom array is defined as
var tableSections : [TableSection]?

func arrangetableSectionsInOrderForNoteType(type: NoteType){

        var tableIndex = 0

        if tableSectionForItemType(itemType: .tableItemNoteItems) != nil  {

            let noteItemSection = tableSectionForItemType(itemType: .tableItemNoteItems)
            removetableSectionWithFrameId(itemType: . tableItemNoteItems)
            tableSections?.insert(noteItemSection!, at: tableIndex)
            tableIndex += 1
        }


        if let commentSection = tableSectionForItemType(itemType: .tableItemComment) {
            removetableSectionWithFrameId(itemType: .tableItemComment)
            tableSections?.insert(commentSection, at: tableIndex)
            tableIndex+=1
        }


        if tableSectionForItemType(itemType: .tableItemAtAGlance) != nil {

            let otherSection = tableSectionForItemType(itemType: .tableItemOtherItems)
            removetableSectionWithFrameId(itemType: . tableItemOtherItems)
            tableSections?.insert(otherSection!, at: tableIndex)
            tableIndex += 1

        }


    }

//这是显示错误的方法

func removetableSectionWithFrameId(itemType : tableItemType){

        if tableSections?.count != 0 {
            for section in tableSections! {

                if section.itemType == itemType {
                 //Error points to this line below
                        self.tableSections?.remove(at: self.tableSections!.index(of: section)!) 
                }
            }
        }
    }

为了修复,我尝试使用以下方法添加同步锁

func sync(lock: NSObject, closure: () -> Void) {
        objc_sync_enter(lock)
        closure()
        objc_sync_exit(lock)
    }

我试图修改发生错误的部分,如下所示,但它仍然给我同样的错误

if section.itemType == itemType {
                    sync(lock: tableSections! as NSObject){
                        self.tableSections?.remove(at: self.tableSections!.index(of: section)!)
                }
        }

任何建议或指导表示赞赏。

4

1 回答 1

0

可能的原因是您在迭代数组时从数组中删除了元素。

试试下面的,看看有没有问题

tableSections = tableSections.filter { $0.itemType != itemType }
于 2017-12-07T09:40:30.967 回答