ios能玩java的模拟器_app适用于模拟器,但不适用于ios设备

该博客讲述了作者在使用Swift开发iOS应用时遇到的问题,应用在模拟器上运行正常,但在iOS设备上崩溃。错误信息涉及在变换图层中更改属性 masksToBounds。代码示例展示了UI布局和日期选择功能,问题可能与输入视图的设置或日期处理有关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有一个应用程序(使用Swift)计算两个日期之间的差异 . 它在模拟器上工作正常但是当我在iOS设备上运行时,它崩溃并给出以下错误消息:

在仅变换图层中更改属性 masksToBounds 将无效 fatal error :

在展开Optional值(lldb)时意外发现nil

在Debug Navigator中,我发现了以下两条错误消息:

8b1884ee-0554-4b40-978c-24bb3d27bac2.png

0ff19db4-a273-4a45-a3cf-57c40bc98f9c.png

如果有人能看到我做错了什么,我将非常感激 . 谢谢!

这是View Controller代码:

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var startDateTextField: UITextField!

@IBOutlet weak var endDateTextField: UITextField!

@IBOutlet weak var resultNumberOfDays: UILabel!

@IBOutlet weak var resultWeeksAndDays: UILabel!

override func viewDidLoad() {

super.viewDidLoad()

self.view.backgroundColor = UIColor(red: 232/255, green: 232/255, blue: 232/255, alpha: 1.0)

let toolBar = UIToolbar(frame: CGRectMake(0, self.view.frame.size.height/6, self.view.frame.size.width, 40.0))

toolBar.layer.position = CGPoint(x: self.view.frame.size.width/2, y: self.view.frame.size.height-20.0)

toolBar.barStyle = UIBarStyle.BlackTranslucent

toolBar.tintColor = UIColor.whiteColor()

UIToolbar.appearance().barTintColor = UIColor(red: 179/255, green: 179/255, blue: 179/255, alpha: 1.0)

let todayBtn = UIBarButtonItem(title: "Today", style: UIBarButtonItemStyle.Plain, target: self, action: "tappedToolBarBtn:")

let okBarBtn = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "donePressed:")

let flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: self, action: nil)

let label = UILabel(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width / 3, height: self.view.frame.size.height))

label.font = UIFont(name: "Helvetica Neue", size: 13)

label.backgroundColor = UIColor.clearColor()

label.textColor = UIColor.whiteColor()

label.text = "Select a Start Date"

label.textAlignment = NSTextAlignment.Center

let textBtn = UIBarButtonItem(customView: label)

toolBar.setItems([todayBtn,flexSpace,textBtn,flexSpace,okBarBtn], animated: true)

startDateTextField.inputAccessoryView = toolBar

let toolBar2 = UIToolbar(frame: CGRectMake(0, self.view.frame.size.height/6, self.view.frame.size.width, 40.0))

toolBar2.layer.position = CGPoint(x: self.view.frame.size.width/2, y: self.view.frame.size.height-20.0)

toolBar2.barStyle = UIBarStyle.BlackTranslucent

toolBar2.tintColor = UIColor.whiteColor()

UIToolbar.appearance().barTintColor = UIColor(red: 107/255, green: 107/255, blue: 107/255, alpha: 1.0)

let todayBtn2 = UIBarButtonItem(title: "Today", style: UIBarButtonItemStyle.Plain, target: self, action: "secondTappedToolBarBtn:")

let okBarBtn2 = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "secondDonePressed:")

let flexSpace2 = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: self, action: nil)

let label2 = UILabel(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width / 3, height: self.view.frame.size.height))

label2.font = UIFont(name: "Helvetica Neue", size: 13)

label2.backgroundColor = UIColor.clearColor()

label2.textColor = UIColor.whiteColor()

label2.text = "Select an End Date"

label2.textAlignment = NSTextAlignment.Center

let textBtn2 = UIBarButtonItem(customView: label2)

toolBar2.setItems([todayBtn2,flexSpace2,textBtn2,flexSpace2,okBarBtn2], animated: true)

endDateTextField.inputAccessoryView = toolBar2

// Do any additional setup after loading the view, typically from a nib.

}

override func didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

// Dispose of any resources that can be recreated.

}

func donePressed(sender: UIBarButtonItem) {

startDateTextField.resignFirstResponder()

}

func secondDonePressed(sender: UIBarButtonItem) {

endDateTextField.resignFirstResponder()

}

func tappedToolBarBtn(sender: UIBarButtonItem) {

let dateformatter = NSDateFormatter()

dateformatter.dateStyle = NSDateFormatterStyle.MediumStyle

dateformatter.timeStyle = NSDateFormatterStyle.NoStyle

startDateTextField.text = dateformatter.stringFromDate(NSDate())

startDateTextField.resignFirstResponder()

}

func secondTappedToolBarBtn(sender: UIBarButtonItem) {

let dateformatter = NSDateFormatter()

dateformatter.dateStyle = NSDateFormatterStyle.MediumStyle

dateformatter.timeStyle = NSDateFormatterStyle.NoStyle

endDateTextField.text = dateformatter.stringFromDate(NSDate())

endDateTextField.resignFirstResponder()

}

override func touchesBegan(touches: Set, withEvent event: UIEvent?) {

self.view.endEditing(true)

}

@IBAction func textFieldEditing(sender: UITextField) {

let datePickerView: UIDatePicker = UIDatePicker()

datePickerView.datePickerMode = UIDatePickerMode.Date

sender.inputView = datePickerView

datePickerView.addTarget(self, action: Selector("datePickerValueChanged:"), forControlEvents: UIControlEvents.ValueChanged)

}

@IBAction func secondTextFieldEditing(sender: UITextField) {

let datePickerView: UIDatePicker = UIDatePicker()

datePickerView.datePickerMode = UIDatePickerMode.Date

sender.inputView = datePickerView

datePickerView.addTarget(self, action: Selector("secondDatePickerValueChanged:"), forControlEvents: UIControlEvents.ValueChanged)

}

func datePickerValueChanged(sender: UIDatePicker) {

let dateFormatter = NSDateFormatter()

dateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle

dateFormatter.timeStyle = NSDateFormatterStyle.NoStyle

startDateTextField.text = dateFormatter.stringFromDate(sender.date)

}

func secondDatePickerValueChanged(sender: UIDatePicker) {

let dateFormatter = NSDateFormatter()

dateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle

dateFormatter.timeStyle = NSDateFormatterStyle.NoStyle

endDateTextField.text = dateFormatter.stringFromDate(sender.date)

}

@IBAction func calculateDays(sender: UIButton) {

if startDateTextField.text == "" || endDateTextField.text == "" {

let alert2 = UIAlertController(title: "Oops!", message: "Please Select a Start Date" + "\n" + "and an End Date!", preferredStyle: UIAlertControllerStyle.Alert)

alert2.addAction(UIAlertAction(title: "Close", style: UIAlertActionStyle.Default, handler: nil))

self.presentViewController(alert2, animated: true, completion: nil)

}

else {

let start = String(startDateTextField.text!)

let end = String(endDateTextField.text!)

let dateFormatter = NSDateFormatter()

dateFormatter.dateFormat = "MM-dd-yyyy"

let startDate:NSDate = dateFormatter.dateFromString(start)!

let endDate:NSDate = dateFormatter.dateFromString(end)!

let calendar = NSCalendar.currentCalendar()

let components = calendar.components([.Day], fromDate: startDate, toDate: endDate, options: [])

let secondNewString = "\(components.day) days"

resultNumberOfDays.text = secondNewString

}

}

@IBAction func calculateWeeksAndDays(sender: UIButton) {

if startDateTextField.text == "" || endDateTextField.text == "" {

let alert2 = UIAlertController(title: "Oops!", message: "Please Select a Start Date" + "\n" + "and an End Date!", preferredStyle: UIAlertControllerStyle.Alert)

alert2.addAction(UIAlertAction(title: "Close", style: UIAlertActionStyle.Default, handler: nil))

self.presentViewController(alert2, animated: true, completion: nil)

}

else {

let start = String(startDateTextField.text!)

let end = String(endDateTextField.text!)

let dateFormatter = NSDateFormatter()

dateFormatter.dateFormat = "MM-dd-yyyy"

let startDate:NSDate = dateFormatter.dateFromString(start)!

let endDate:NSDate = dateFormatter.dateFromString(end)!

let calendar = NSCalendar.currentCalendar()

let components = calendar.components([.Day], fromDate: startDate, toDate: endDate, options: [])

let days = components.day

let weeks = components.day / 7

let weeksanddays = days % 7

let newString = "\(weeks) weeks + \(weeksanddays) days"

resultWeeksAndDays.text = newString

}

}

@IBAction func resetLabels(sender: AnyObject) {

resultNumberOfDays.text = ""

resultWeeksAndDays.text = ""

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值