我们的应用程序是一个会议组织者,它根据FreeTime,Conflicts和Meeting TimeBlocks向用户显示他们的原生iOS日历事件.我可以访问几个崩溃用户的日历.
Apple SigTrap定义
Swift code will terminate with this exception type if an unexpected
condition is encountered at runtime such as:
- a non-optional type with a nil value
- a Failed forced type conversion
崩溃功能
/** Updates the conflictHours and meetingHours according to the timeblocks it is used as quick light reference to the button */ func updateTimeHours(timeblocks : [Timeblock]) { for timeblock in timeblocks { switch timeblock { case is MeetingTimeblock: for i in timeblock.startHour...timeblock.endHour { self.meetingHours[i] = true } break case is ConflictTimeblock: for i in timeblock.startHour...timeblock.endHour { self.conflictsHours[i] = true } break default: break } } updateButtonByOffset(offset: self.scrollTimeline.contentOffset.x) }
召唤崩溃函数
/** This function inits the variables and button layout according to the timeblocks */ func handleTimeblocksDependantComponents() { buttonLayout() guard Scheduler.sharedInstance.timelines.count > SharedGlobals.Calendar.TODAY_INDEX else { return } updateTimeHours(timeblocks : (Scheduler.sharedInstance.timelines[SharedGlobals.Calendar.TODAY_INDEX].timeblocks)) }
SetHeaderHeight
/** Adjusts the height of the header depending on whether there are hosted meetings or meeting VIP's or not. */ private func setHeaderHeight() { self.tableView.tableHeaderView = self.headerView let hostedMeetings = OverviewInteractor.getHostedMeetings(dayIndex: SharedGlobals.Calendar.SELECTED_DAY) let vips = OverviewInteractor.getVIPS(dayIndex: SharedGlobals.Calendar.SELECTED_DAY) self.tableView.beginUpdates() if let headerView = self.tableView.tableHeaderView { var height = 360.0 if(vips.count == 0) { height -= 80.0 } if(hostedMeetings.count == 0) { height -= 80.0 } headerView.frame.size.height = CGFloat(height) } self.tableView.endUpdates() }
TimeBlock定义
// The Timeblock parent class. It simply holds a start and end time and provides its own duration. Not to be used as such public class Timeblock { public let startTime: Date public let endTime: Date /// Returns the hour the Timeblock starts,in current timezone public var startHour: Int { get { return Calendar.current.component(.hour,from: startTime) } } /// Returns the hour the Timeblocks ends,in current timezone public var endHour: Int { get { return Calendar.current.component(.hour,from: endTime) } } /// Returns the minutes the Timeblocks starts public var startMinutes: Int { get { return Calendar.current.component(.minute,from: startTime) } } /// Returns the minutes the Timeblocks ends public var endMinutes: Int { get { return Calendar.current.component(.minute,from: endTime) } } /** Initialises the instance with a start and end time - Parameters: - startTime: The start time of the timeblock - endTime: The end time of the timeblock */ public init(startTime: Date,endTime: Date) { self.startTime = startTime self.endTime = endTime } /** Provides the Timeblock's duration in the form of a DateInterval - warning: Only available on iOS 10.0 and up - returns: A DateInterval of the duration of the Timeblock */ @available(iOS 10.0,*) public func getTimeInterval() -> DateInterval { return DateInterval(start: self.startTime,end: self.endTime) } /** Provides the Timeblock's duration in the form of a `Double` (number of seconds) - returns: The number of seconds that this Timeblock goes on for */ public func getDuration() -> Double { return self.endTime.timeIntervalSince(self.startTime) } }
崩溃报告
Incident Identifier: 98D4F477-C57B-4767-B957-E9EA2E0EE3EA
CrashReporter Key: 0000000000000000000000000000000000000000 Hardware
Model: undefined Process: xxxxxxx [784] Identifier:
com.xxx.xxx.xx.xxxxxxx Version: 4.0.3 Code Type:
arm64Date/Time: Sun Dec 24 2017 09:55:23 GMT+0000 (GMT) Launch
Time: Invalid Date OS Version: undefined 11.0.3
(15A432) Report Version: 105Exception Type: SIGTRAP Exception Subtype: undefined
Thread 0 name: Thread 0 Crashed: 0 CallIn
0x0000000102c224e4 specialized
TimelineHeader.updateTimeHours(timeblocks:) (TimelineHeader.swift:0) 1
CallIn 0x0000000102c20af0
TimelineHeader.handleTimeblocksDependantComponents()
(TimelineHeader.swift:0) 2 CallIn
0x0000000102c7a28c specialized
MeetingTableViewController.tableView(:viewForHeaderInSection:)
(TimelineHeader.swift:78) 3 CallIn
0x0000000102c75d54 @objc
MeetingTableViewController.tableView(:viewForHeaderInSection:)
(MeetingTableViewController.swift:0) 4 UIKit
0x000000018d1157d8 -[UITableView _delegateViewForHeaderInSection:]
(UIKit) 5 UIKit 0x000000018d11def0
96-[UITableView _sectionHeaderView:withFrame:forSection:floating:reuseViewIfPossible:willDisplay:]_block_invoke
(UIKit) 6 UIKit 0x000000018cdf1a14
+[UIView(Animation) performWithoutAnimation:] (UIKit) 7 UIKit 0x000000018d11dc60 -[UITableView
_sectionHeaderView:withFrame:forSection:floating:reuseViewIfPossible:willDisplay:]
(UIKit) 8 UIKit 0x000000018cfc6c04
-[_UITableViewUpdateSupport(Private) _setupAnimationsForExistingHeadersAndFooters] (UIKit) 9 UIKit 0x000000018cfc1070 -[_UITableViewUpdateSupport _setupAnimations]
(UIKit) 10 UIKit 0x000000018cfc0944
-[UITableView _updateWithItems:updateSupport:] (UIKit) 11 UIKit 0x000000018cfa8448 -[UITableView endCellAnimationsWithContext:]
(UIKit) 12 UIKit 0x000000018cfa46e4
-[UITableView endUpdates] (UIKit) 13 CallIn 0x0000000102c761a4 MeetingTableViewController.setHeaderHeight()
(MeetingTableViewController.swift:398) 14 CallIn
0x0000000102c7a7c8 specialized closure #1 in
MeetingTableViewController.refreshTable(