- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大家
第一次在这里发帖,但是什么都没有。我目前正在为我正在为学校开发的应用程序做出贡献。我最近添加的功能是该应用程序的计划功能。昨天,该应用程序能够创建、移动、存储和删除作业。今天,我的目标是添加编辑作业的功能。当我第一次尝试运行新代码时,它除了说我试图访问的数组中的索引不存在之外,还返回了 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/
我正在使用 swift 在 xcode 9 中构建一个应用程序。我最近使用 cocoa pod 将 firebase 安装到我的项目中。我相当确定我安装正确,但是在进行更改并摆弄 View Contr
当使用 NSMutableDictionary 时,我在 iOS 中出现了一些非常奇怪的行为。我正在使用以下代码从应用程序委托(delegate)访问字典。 self.dictTyp = appDel
简单的问题,但这给了我一个错误,我似乎无法解决它。 在我的对象(UIViewController)中,我在 .h 中声明了一个方法 -(void)setCurrentLoc:(CLLocation *
当我尝试为我的社交媒体应用程序获取图像选择器 Controller 时,它给我一个错误! [access] 我尝试制作另一个项目并使用其他 View Controller 和 UITapGestur
所以我有两个 View ,我试图与导航连接。 我已将它们嵌入到导航 Controller 中,并在 Storyboard 中创建了它们之间的 push segue: 在第一个 Controller 的
我刚刚开始在 Udemy 上使用 Xcode 进行编码类(class)。我相信我已经拿到了 7.2 beta。我在做cat项目的时候遇到了这个错误。 // AppDelegate.swift //
我知道以前有人问过这个问题,但我不明白为什么会这样。发生这种情况的原因似乎有很多。 当我在我的一个 View 上单击一个按钮(称为下一个)时,就会发生这种情况。我会给你 View 的代码和它后面的 V
我正在使用 Firebase 和云消息传递做一些事情。 问题是我需要在 FirebaseApp.configure() 之前调用 application.registerForRemoteNotifi
当调用 segue 到 viewController 时,我收到 SIGBART 错误。 执行进入此函数并在 return 语句处停止,并出现错误 SIGBART。 int main(int argc
从头开始一个 Xcode 项目。选定的单一 View 选项。放在 View 上方的 TableView 中。选择了1个细胞原型(prototype)。创建了一个单元标识符“cell”。添加了 UITa
我找不到我的程序抛出 SIGBART 错误的原因。 我在调用此函数时缩小了范围。 bool Node::isEdgeConnected(Node vertex1, Node vertex2){ //I
我编写了这个小程序来查找较大字符串中所有出现的子字符串,或者干草堆中的针。当我在本地运行该程序时,它似乎工作得很好。然而,当我将其提交给在线竞赛进行评审时,它给出了 SIGBART 错误。我认为这是因
我最近更新 iOS 后开始收到此错误。我认为这与我的约束的格式有关,但我无法弄清楚。这是我的错误消息 由于未捕获的异常“NSInvalidLayoutConstraintException”而终止应用
大家 第一次在这里发帖,但是什么都没有。我目前正在为我正在为学校开发的应用程序做出贡献。我最近添加的功能是该应用程序的计划功能。昨天,该应用程序能够创建、移动、存储和删除作业。今天,我的目标是添加编辑
我面临着创建一个类的静态函数的问题 我正在开发一个需要自定义输入 View 的应用程序。我的想法是把这个函数作为一个 go-to,这样无论什么类型的 UIKit 组件需要这个自定义输入 View 都可
我正在尝试进入 iOS 编程。我有最新的 XCode,4.2 Build 4D177b。我从一个带有 ARC 的单一 View 应用程序开始。我在上面放置了一个 UITextField 并使用拖动来获
我正在尝试创建一个应用程序,根据选定的颜色记录当前日历日的单元格。我已经使该部分正常工作,但后来我添加了另一个名为“ToDoViewViewController”的 UIViewController,
我是一名优秀的程序员,十分优秀!