Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
由于RLMEException,Swift应用程序崩溃_Swift_Realm - Fatal编程技术网

由于RLMEException,Swift应用程序崩溃

由于RLMEException,Swift应用程序崩溃,swift,realm,Swift,Realm,我目前正在写一个程序,这将是我专业“计算机科学”的最后一个项目。我的申请书写得很快。它基本上是一个应用程序,允许编写和分类用户计划每天、每月或每年执行的任务。我刚被困在调试控制台里。我想不出来 我问我的大多数同学,他们是否可以帮助我试图从哪里理解这个问题 问题可能来自通过以下代码编写的搜索栏功能: extension CategoryViewController: SwipeTableViewCellDelegate { func tableView(_ tableView: UITa

我目前正在写一个程序,这将是我专业“计算机科学”的最后一个项目。我的申请书写得很快。它基本上是一个应用程序,允许编写和分类用户计划每天、每月或每年执行的任务。我刚被困在调试控制台里。我想不出来

我问我的大多数同学,他们是否可以帮助我试图从哪里理解这个问题

问题可能来自通过以下代码编写的搜索栏功能:

extension CategoryViewController: SwipeTableViewCellDelegate {

    func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -> [SwipeAction]? {
        guard orientation == .right else { return nil }

        let deleteAction = SwipeAction(style: .destructive, title: "Delete") { action, indexPath in
            // handle action by updating model with deletion

            if let categoryForDeletion = self.categories?[indexPath.row] {
                do {
                    try self.realm.write {
                        self.realm.delete(categoryForDeletion)
                    }
                } catch {
                    print("Error deleting the category, \(error)")
                }
            }
        }

        // customize the action appearance
        deleteAction.image = UIImage(named: "delete-icon")

        return [deleteAction]
    }

    func collectionView(_ collectionView: UICollectionView, editActionsOptionsForItemAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -> SwipeOptions {
        var options = SwipeOptions()
        options.expansionStyle = .destructive
        return options
    }
}
我明白了:

'RLMException', reason: 'Index 2 is out of bounds (must be less than 2).'
*** First throw call stack:
(
    0   CoreFoundation                      0x000000010519e1bb __exceptionPreprocess + 331
    1   libobjc.A.dylib                     0x00000001038e6735 objc_exception_throw + 48
    2   Realm                               0x00000001028b4d3e _Z20RLMThrowResultsErrorP8NSString + 670
    3   Realm                               0x00000001028b5fa6 _ZL25translateRLMResultsErrorsIZ28-[RLMResults objectAtIndex:]E3$_6EDaOT_P8NSString + 118
    4   Realm                               0x00000001028b5ece -[RLMResults objectAtIndex:] + 110
    5   RealmSwift                          0x0000000101ef2e3c $S10RealmSwift7ResultsCyxSicig + 220
    6   Todoey2                             0x0000000101aea48f $S7Todoey222CategoryViewControllerC05tableC0_19editActionsForRowAt3forSay12SwipeCellKit0L6ActionCGSgSo07UITableC0C_10Foundation9IndexPathVAG0lG11OrientationOtFyAI_APtcfU_ + 303
    7   Todoey2                             0x0000000101aea8e2 $S7Todoey222CategoryViewControllerC05tableC0_19editActionsForRowAt3forSay12SwipeCellKit0L6ActionCGSgSo07UITableC0C_10Foundation9IndexPathVAG0lG11OrientationOtFyAI_APtcfU_TA + 18
    8   SwipeCellKit                        0x000000010224c3e8 $S12SwipeCellKit0A10ControllerC7perform6action4hideyAA0A6ActionC_SbtF + 776
    9   SwipeCellKit                        0x0000000102245d99 $S12SwipeCellKit0A10ControllerC7perform6actionyAA0A6ActionC_tF + 1241
    10  SwipeCellKit                        0x000000010224b734 $S12SwipeCellKit0A10ControllerC16swipeActionsView_9didSelectyAA0afG0C_AA0A6ActionCtF + 52
    11  SwipeCellKit                        0x000000010224e199 $S12SwipeCellKit0A10ControllerCAA0A19ActionsViewDelegateA2aDP05swipeeF0_9didSelectyAA0aeF0C_AA0A6ActionCtFTW + 9
    12  SwipeCellKit                        0x000000010222c40e $S12SwipeCellKit0A11ActionsViewC12actionTapped6buttonyAA0A12ActionButtonC_tF + 590
    13  SwipeCellKit                        0x000000010222c47c $S12SwipeCellKit0A11ActionsViewC12actionTapped6buttonyAA0A12ActionButtonC_tFTo + 60
    14  UIKitCore                           0x000000010d233ecb -[UIApplication sendAction:to:from:forEvent:] + 83
    15  UIKitCore                           0x000000010cc6f0bd -[UIControl sendAction:to:forEvent:] + 67
    16  UIKitCore                           0x000000010cc6f3da -[UIControl _sendActionsForEvents:withEvent:] + 450
    17  UIKitCore                           0x000000010cc6e31e -[UIControl touchesEnded:withEvent:] + 583
    18  UIKitCore                           0x000000010ce07018 _UIGestureEnvironmentSortAndSendDelayedTouches + 5387
    19  UIKitCore                           0x000000010ce00fd1 _UIGestureEnvironmentUpdate + 1506
    20  UIKitCore                           0x000000010ce009ad -[UIGestureEnvironment _deliverEvent:toGestureRecognizers:usingBlock:] + 478
    21  UIKitCore                           0x000000010ce0071d -[UIGestureEnvironment _updateForEvent:window:] + 200
    22  UIKitCore                           0x000000010d27078a -[UIWindow sendEvent:] + 4058
    23  UIKitCore                           0x000000010d24e394 -[UIApplication sendEvent:] + 352
    24  UIKitCore                           0x000000010d3235a9 __dispatchPreprocessedEventFromEventQueue + 3054
    25  UIKitCore                           0x000000010d3261cb __handleEventQueueInternal + 5948
    26  CoreFoundation                      0x0000000105103721 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    27  CoreFoundation                      0x0000000105102f93 __CFRunLoopDoSources0 + 243
    28  CoreFoundation                      0x00000001050fd63f __CFRunLoopRun + 1263
    29  CoreFoundation                      0x00000001050fce11 CFRunLoopRunSpecific + 625
    30  GraphicsServices                    0x000000010a6731dd GSEventRunModal + 62
    31  UIKitCore                           0x000000010d23281d UIApplicationMain + 140
    32  Todoey2                             0x0000000101aef817 main + 71
    33  libdyld.dylib                       0x0000000104ce9575 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

这是一个索引越界异常:

'RLMEException',原因:'索引2超出范围(必须小于 2) .'

当使用大于或等于数组长度(等于,因为数组索引从0开始,而不是从1开始)的索引为数组下标时,会发生这种情况

如果让categoryForDeletion=self.categories?[indexPath.row]


如果行>=self.categories.count,上述行将崩溃。我建议查看numberOfRowsForSection函数,找出为什么行多于类别。

这是一个索引越界异常:

'RLMEException',原因:'索引2超出范围(必须小于 2) .'

当使用大于或等于数组长度(等于,因为数组索引从0开始,而不是从1开始)的索引为数组下标时,会发生这种情况

如果让categoryForDeletion=self.categories?[indexPath.row]


如果行>=self.categories.count,上述行将崩溃。我建议查看numberOfRowsForSection函数,找出为什么行比类别多。

很难用很少的代码就知道发生了什么

我建议您在代码中乱放打印语句(尤其是
数组计数
indexath.row
cellForRow
editActionsForRowAt
等),看看哪里出了问题

看起来您正在对领域数据库中不存在的行调用delete,因为该行正在崩溃

下面是我如何更新闭包的

{ action, indexPath in
            // handle action by updating model with deletion
            print("\(indexPath.row)")
            print("\(self.categories?.count)") //if these two mismatch, that's the problem

            if let categoryForDeletion = self.categories?[indexPath.row] {
                do {
                    try self.realm.write {
                        self.realm.delete(categoryForDeletion)
                    }
                } catch {
                    print("Error deleting the category, \(error)")
                }
            }
        }

很难用很少的代码来判断发生了什么

我建议您在代码中乱放打印语句(尤其是
数组计数
indexath.row
cellForRow
editActionsForRowAt
等),看看哪里出了问题

看起来您正在对领域数据库中不存在的行调用delete,因为该行正在崩溃

下面是我如何更新闭包的

{ action, indexPath in
            // handle action by updating model with deletion
            print("\(indexPath.row)")
            print("\(self.categories?.count)") //if these two mismatch, that's the problem

            if let categoryForDeletion = self.categories?[indexPath.row] {
                do {
                    try self.realm.write {
                        self.realm.delete(categoryForDeletion)
                    }
                } catch {
                    print("Error deleting the category, \(error)")
                }
            }
        }

请在代码块中添加控制台输出,以便更容易阅读我刚刚编辑的内容。感谢您提供反馈!请在代码块中添加控制台输出,以便更容易阅读我刚刚编辑的内容。感谢您提供反馈!