gpt4 book ai didi

ios - 应用程序给出 SIGBART 并声称打开特定 View 时数组索引不存在,然后崩溃

转载 作者:行者123 更新时间:2023-11-30 12:08:14 26 4
gpt4 key购买 nike

大家

第一次在这里发帖,但是什么都没有。我目前正在为我正在为学校开发的应用程序做出贡献。我最近添加的功能是该应用程序的计划功能。昨天,该应用程序能够创建、移动、存储和删除作业。今天,我的目标是添加编辑作业的功能。当我第一次尝试运行新代码时,它除了说我试图访问的数组中的索引不存在之外,还返回了 SIGBART 错误,尽管我几乎肯定它确实存在。这是完整的代码:

https://github.com/nicholaszana/SSA-Mobile-App-PlannerTab

但我很确定错误出在这个 ViewController 中:

//
// NewAssignmentViewController.swift
// PlannerTab
//
// Created by Nicholas Zana on 9/21/17.
// Copyright © 2017 Nicholas Zana. All rights reserved.
//

import UIKit

class NewAssignmentViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate, UITextFieldDelegate, UITextViewDelegate {


@IBOutlet weak var assignmentTextField: UITextField!
@IBOutlet weak var notesTextView: UITextView!

@IBOutlet weak var classPicker: UIPickerView!
@IBOutlet weak var dueDatePicker: UIDatePicker!
var array:Array = [C1Name, C2Name, C3Name, C4Name, C5Name, C6Name]
var selectedClassName = C1Name
var dueDate:Date = Date()
override func viewDidLoad() {
super.viewDidLoad()

// Do any additional setup after loading the view.
self.assignmentTextField.delegate = self
notesTextView.delegate = self

var namesArray:Array = UserDefaults.standard.array(forKey: "AssignmentNamesArray")!
var dueDateArray:Array = UserDefaults.standard.array(forKey: "AssignmentDueDateArray")!
var classArray:Array = UserDefaults.standard.array(forKey: "AssignmentClassArray")!
var notesArray:Array = UserDefaults.standard.array(forKey: "AssignmentNotesArray")!
notesTextView.text = notesArray[clickedCell] as! String
assignmentTextField.text = namesArray[clickedCell] as! String
dueDatePicker.date = dueDateArray[clickedCell] as! Date
classPicker.selectRow(1, inComponent: 1, animated: false)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

//clickedCell defined in other view controller
@IBAction func didPressFinish(_ sender: Any) {
var namesArray:Array = UserDefaults.standard.array(forKey: "AssignmentNamesArray")!
namesArray[clickedCell - 1] = "\(assignmentTextField.text!)"
UserDefaults.standard.set(namesArray, forKey: "AssignmentNamesArray")
var dueDateArray:Array = UserDefaults.standard.array(forKey: "AssignmentDueDateArray")!
dueDateArray[clickedCell - 1] = dueDate
UserDefaults.standard.set(dueDateArray, forKey: "AssignmentDueDateArray")
var classArray:Array = UserDefaults.standard.array(forKey: "AssignmentClassArray")!
classArray[clickedCell - 1] = selectedClassName
UserDefaults.standard.set(classArray, forKey: "AssignmentClassArray")
var notesArray:Array = UserDefaults.standard.array(forKey: "AssignmentNotesArray")!
notesArray[clickedCell - 1] = notesTextView.text!
UserDefaults.standard.set(notesArray, forKey: "AssignmentNotesArray")
UserDefaults.standard.synchronize()
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return 6
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return array[row]
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
selectedClassName = array[row]
}


func textFieldShouldReturn(_ textField: UITextField) -> Bool {
self.view.endEditing(true)
return false
}

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if(text == "\n") {
textView.resignFirstResponder()
return false
}
return true
}

@IBAction func dueDateValueChanged(_ sender: Any) {
dueDatePicker.datePickerMode = UIDatePickerMode.date
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .long
let selectedDate = dueDatePicker.date
dueDate = selectedDate
}



}

是什么导致了这些错误?它们是不同的问题,还是同一个问题?

谢谢

/恩扎纳

编辑:这是 ViewController.swift:

//
// ViewController.swift
// PlannerTab
//
// Created by Nicholas Zana on 9/21/17.
// Copyright © 2017 Nicholas Zana. All rights reserved.
//

import UIKit

let C1Name = "History"

let C2Name = "Chemistry"

let C3Name = "Chinese 2A"

let C4Name = "Math II"

let C5Name = "Computer"

let C6Name = "Free"

var clickedCell:Int = 0

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UIGestureRecognizerDelegate {

@IBOutlet weak var editButton: UIButton!
//Outlet for Table View
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.

//Checks if App has ever been run before.
if (UserDefaults.standard.bool(forKey: "HasLaunchedOnce")) {
// This code will be run only if the app has been run before.
} else {
//This code is only run on the very first app launch.
//UserDefaults are just permanately stored (even after app closed) variables. Google Them. They're really cool and easy to use.

//Stores "UserDefaults" to say that the App has launched before.
UserDefaults.standard.set(true, forKey: "HasLaunchedOnce")
//Updates UserDefaults
UserDefaults.standard.synchronize()
//Creates an Array in "UserDefaults" to store names of each task
UserDefaults.standard.set(["This is your digital planner!", "Add assignments with +", "Swipe left to complete"], forKey: "AssignmentNamesArray")
//Creates an Array in "UserDefaults" to store the due date of each task
UserDefaults.standard.set([Date(), Date(), Date()], forKey: "AssignmentDueDateArray")
//Creates an Array in "UserDefaults" to store the due Period of each task
UserDefaults.standard.set(["These are Notes. You can add additional information about an assignemnt here.","Notes","Notes"], forKey: "AssignmentNotesArray")
//Creates an Array in "UserDefaults" to store the class of each task
UserDefaults.standard.set([C1Name, C2Name, C3Name], forKey: "AssignmentClassArray")
}
}


@IBAction func didPressPlus(_ sender: Any) {
var namesArray = UserDefaults.standard.array(forKey: "AssignmentNamesArray")!
namesArray.append("Assignment Name")
UserDefaults.standard.set(namesArray, forKey: "AssignmentNamesArray")
var dueDateArray = UserDefaults.standard.array(forKey: "AssignmentDueDateArray")!
dueDateArray.append(Date())
UserDefaults.standard.set(dueDateArray, forKey: "AssignmentDueDateArray")
print(UserDefaults.standard.array(forKey: "AssignmentDueDateArray")!)
var classArray = UserDefaults.standard.array(forKey: "AssignmentClassArray")!
classArray.append(C1Name)
UserDefaults.standard.set(classArray, forKey: "AssignmentClassArray")
var notesArray = UserDefaults.standard.array(forKey: "AssignmentNotesArray")!
notesArray.append("Notes")
clickedCell = namesArray.count
}

//Tells how many cells need to be in the table view
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return UserDefaults.standard.array(forKey: "AssignmentNamesArray")!.count
}
//Adds ability to delete cells
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == UITableViewCellEditingStyle.delete {
var namesArray = UserDefaults.standard.array(forKey: "AssignmentNamesArray")!
namesArray.remove(at: indexPath.row)
UserDefaults.standard.set(namesArray, forKey: "AssignmentNamesArray")
var dueDateArray = UserDefaults.standard.array(forKey: "AssignmentDueDateArray")!
dueDateArray.remove(at: indexPath.row)
UserDefaults.standard.set(dueDateArray, forKey: "AssignmentDueDateArray")
print(UserDefaults.standard.array(forKey: "AssignmentDueDateArray")!)
var classArray = UserDefaults.standard.array(forKey: "AssignmentClassArray")!
classArray.remove(at: indexPath.row)
UserDefaults.standard.set(classArray, forKey: "AssignmentClassArray")
var notesArray = UserDefaults.standard.array(forKey: "AssignmentNotesArray")!
notesArray.remove(at: indexPath.row)
UserDefaults.standard.set(namesArray, forKey: "AssignmentNotesArray")
tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.automatic)
}
}

//Creates Cells
@available(iOS 2.0, *)
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//Creates a cell as defined by prototype cell
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! AssignmentTableViewCellViewController
//sets cell
//Names
let namesArray:Array = UserDefaults.standard.array(forKey: "AssignmentNamesArray")!
cell.assignmentNameLabel.text = namesArray[indexPath.row] as? String
//Due Date
func inputDateWeekdayAsString(Date:Date) -> String {
let inputDate = Date

let inputWeekday:Int = Calendar.current.component(.weekday, from: inputDate)

let weekdayArray:Array = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
if inputWeekday == nil {
return "Error!"
} else {
return weekdayArray[inputWeekday - 1]
}
}
let dueDateArray:Array = UserDefaults.standard.array(forKey: "AssignmentDueDateArray")!
DateFormatter().dateStyle = .long
DateFormatter().locale = Locale.init(identifier: "en_GB")
let inputDate:Date = dueDateArray[indexPath.row] as! Date
let inputDateForDisplay = DateFormatter().string(from: inputDate)
let inputWeekdayAsStringVar = inputDateWeekdayAsString(Date: inputDate)
let inputYear = Calendar.current.component(.year, from: inputDate)
let inputMonth = Calendar.current.component(.month, from: inputDate)
let inputDay = Calendar.current.component(.day, from: inputDate)
let todayYear = Calendar.current.component(.year, from: Date())
let todayMonth = Calendar.current.component(.month, from: Date())
let todayDay = Calendar.current.component(.day, from: Date())
var dueDateOutputString = "\(dueDateArray[indexPath.row])"

if inputYear != todayYear {
dueDateOutputString = "\(inputWeekdayAsStringVar), \(inputDateForDisplay)"
} else if inputMonth != todayMonth {
dueDateOutputString = "\(inputWeekdayAsStringVar), \(inputDateForDisplay)"
} else if (inputDay - todayDay < 7) && (inputDay - todayDay > 0) {
if inputDay - todayDay == 1 {
dueDateOutputString = "Tommorow"
} else {
dueDateOutputString = "Next \(inputWeekdayAsStringVar)"
}
} else if (inputDay - todayDay > -7) && (inputDay - todayDay < 0) {
if inputDay - todayDay == 1 {
dueDateOutputString = "Yesterday"
} else {
dueDateOutputString = "Last \(inputWeekdayAsStringVar)"
}
} else if inputDay == todayDay {
dueDateOutputString = "Today"
} else {
dueDateOutputString = "\(inputWeekdayAsStringVar), \(inputDateForDisplay)"
print(inputDateForDisplay)
}


cell.assignmentDueDateLabel.text = dueDateOutputString
//Class
let assignmentClassArray:Array = UserDefaults.standard.array(forKey: "AssignmentClassArray")!
cell.assignmentClassLabel.text = assignmentClassArray[indexPath.row] as? String

return (cell)
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
{
return 75;//Sets height of each Assignment Cell
}

//Allows dragging around cell order

func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
return true
}

//Tells app how to reorder arrays when table view is changed
func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
//Names
var namesArray:Array = UserDefaults.standard.array(forKey: "AssignmentNamesArray")!
let namesItem = namesArray[sourceIndexPath.row]
namesArray.remove(at: sourceIndexPath.row)
namesArray.insert(namesItem, at: destinationIndexPath.row)
UserDefaults.standard.set(namesArray, forKey: "AssignmentNamesArray")
//DueDates
var dueDateArray:Array = UserDefaults.standard.array(forKey: "AssignmentDueDateArray")!
let dueDateItem = dueDateArray[sourceIndexPath.row]
dueDateArray.remove(at: sourceIndexPath.row)
dueDateArray.insert(dueDateItem, at: destinationIndexPath.row)
UserDefaults.standard.set(dueDateArray, forKey: "AssignmentDueDateArray")
//Class
var classArray:Array = UserDefaults.standard.array(forKey: "AssignmentClassArray")!
let classItem = classArray[sourceIndexPath.row]
classArray.remove(at: sourceIndexPath.row)
classArray.insert(classItem, at: destinationIndexPath.row)
UserDefaults.standard.set(classArray, forKey: "AssignmentClassArray")
//Notes
var notesArray:Array = UserDefaults.standard.array(forKey: "AssignmentNotesArray")!
let notesItem = namesArray[sourceIndexPath.row]
notesArray.remove(at: sourceIndexPath.row)
notesArray.insert(notesItem, at: destinationIndexPath.row)
UserDefaults.standard.set(notesArray, forKey: "AssignmentNotesArray")
//Synchronizes UserDefaults
UserDefaults.standard.synchronize()
}
@IBAction func didPressEditButton(_ sender: Any) {
//Enables dragging around items
tableView.isEditing = !tableView.isEditing

if tableView.isEditing == true {
editButton.setTitle("Done", for: .normal)
} else {
editButton.setTitle("Edit", for: .normal)
}

}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
clickedCell = indexPath.row
}

}

根据“rt”的请求,这是在控制台中输入“bt”的结果。不过我不太确定这意味着什么。

* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
frame #0: 0x000000010fd67d42 libsystem_kernel.dylib`__pthread_kill + 10
frame #1: 0x000000010fd9f457 libsystem_pthread.dylib`pthread_kill + 90
frame #2: 0x000000010fa28107 libsystem_c.dylib`abort + 127
frame #3: 0x000000010f7ba91f libc++abi.dylib`abort_message + 245
frame #4: 0x000000010f7baabb libc++abi.dylib`default_terminate_handler() + 265
frame #5: 0x000000010ae6c1be libobjc.A.dylib`_objc_terminate() + 97
frame #6: 0x000000010f7d6159 libc++abi.dylib`std::__terminate(void (*)()) + 8
frame #7: 0x000000010f7d5e0a libc++abi.dylib`__cxa_rethrow + 99
frame #8: 0x000000010ae6c0dc libobjc.A.dylib`objc_exception_rethrow + 40
frame #9: 0x000000010b48fb09 CoreFoundation`CFRunLoopRunSpecific + 537
frame #10: 0x0000000110f829c6 GraphicsServices`GSEventRunModal + 62
frame #11: 0x000000010b983d30 UIKit`UIApplicationMain + 159
* frame #12: 0x000000010a53f7f7 PlannerTab`main at AppDelegate.swift:12
frame #13: 0x000000010f955d81 libdyld.dylib`start + 1

最佳答案

删除/评论此行修复了您的崩溃

classPicker.selectRow(1, inComponent: 1, 动画: false)

基本上您只有 1 个组件,因此适合您的正确行是

classPicker.selectRow(1, inComponent: 0, 动画: false)

关于ios - 应用程序给出 SIGBART 并声称打开特定 View 时数组索引不存在,然后崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46411094/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com