【发布时间】:2015-07-27 15:40:21
【问题描述】:
我无法找出代码混淆的地方。出于某种原因,当我单击 textFieldStartTime 或 textFieldEndtime 时,它们会同时更改以及更改 textFieldDDate 中的日期。
感谢任何帮助。
扩展.swift
import Foundation
extension NSDate{
var stringValue: String{
return self.toString()
}
func toString() -> String {
let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MMM-dd"
let str = formatter.stringFromDate(self)
return str
}
}
extension String{
var dateValue: NSDate?{
return self.toDate()
}
func toDate() -> NSDate? {
let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MMM-dd"
if let date = formatter.dateFromString(self) {
return date
}else{
// if format failed, Put some code here
return nil // an example
}
}
}
extension NSDate{
var starttimestringValue: String{
return self.tostarttimeString()
}
func tostarttimeString() -> String {
let formatter = NSDateFormatter()
formatter.dateFormat = "HH:mm"
let str = formatter.stringFromDate(self)
return str
}
}
extension String{
var starttimedateValue: NSDate?{
return self.tostarttimeDate()
}
func tostarttimeDate() -> NSDate? {
let formatter = NSDateFormatter()
formatter.dateFormat = "HH:mm"
if let date = formatter.dateFromString(self) {
return date
}else{
// if format failed, Put some code here
return nil // an example
}
}
}
extension NSDate{
var endtimestringValue: String{
return self.toendtimeString()
}
func toendtimeString() -> String {
let formatter = NSDateFormatter()
formatter.dateFormat = "HH:mm"
let endstr = formatter.stringFromDate(self)
return endstr
}
}
extension String{
var endtimedateValue: NSDate?{
return self.toendtimeDate()
}
func toendtimeDate() -> NSDate? {
let formatter = NSDateFormatter()
formatter.dateFormat = "HH:mm"
if let date = formatter.dateFromString(self) {
return date
}else{
// if format failed, Put some code here
return nil // an example
}
}
}
AddDiveLogViewController.swift
import UIKit
import CoreData
class AddDiveLogViewController: UIViewController {
@IBOutlet weak var textFieldDiveNumber: UITextField!
@IBOutlet weak var textFieldDiveLocation: UITextField!
@IBOutlet weak var textFieldDDate: UITextField!
@IBOutlet weak var textFieldStartTime: UITextField!
@IBOutlet weak var textFieldEndTime: UITextField!
var divenumber: String = ""
var divelocation: String = ""
var ddate = NSDate()
var starttime = NSDate()
var endtime = NSDate()
var datePickerView: UIDatePicker!
var timePickerView: UIDatePicker!
var endtimePickerView: UIDatePicker!
var existingItem: NSManagedObject!
override func viewDidLoad() {
super.viewDidLoad()
if (existingItem != nil) {
textFieldDiveNumber.text = divenumber
textFieldDiveLocation.text = divelocation
textFieldDDate.text = ddate.stringValue
textFieldStartTime.text = starttime.starttimestringValue
textFieldEndTime.text = endtime.endtimestringValue
}
// Do any additional setup after loading the view.
// This sets up the Date Picker
datePickerView = UIDatePicker()
datePickerView.datePickerMode = UIDatePickerMode.Date
var toolbar = UIToolbar(frame: CGRectMake(0, 0, datePickerView.frame.width, 44))
let OKButton = UIBarButtonItem(title: "OK", style: .Plain, target: self, action: "OKButtonTapped:")
toolbar.setItems([OKButton], animated: true)
self.textFieldDDate.inputView = datePickerView
self.textFieldDDate.inputAccessoryView = toolbar
// This sets up the Time Picker
timePickerView = UIDatePicker()
timePickerView.datePickerMode = UIDatePickerMode.Time
var timetoolbar = UIToolbar(frame: CGRectMake(0, 0, timePickerView.frame.width, 44))
let TimeOKButton = UIBarButtonItem(title: "OK", style: .Plain, target: self, action: "OKButtonTapped:")
timetoolbar.setItems([TimeOKButton], animated: true)
self.textFieldStartTime.inputView = timePickerView
self.textFieldStartTime.inputAccessoryView = timetoolbar
// This sets up the End Time Picker
endtimePickerView = UIDatePicker()
endtimePickerView.datePickerMode = UIDatePickerMode.Time
var endtimetoolbar = UIToolbar(frame: CGRectMake(0, 0, endtimePickerView.frame.width, 44))
let endTimeOKButton = UIBarButtonItem(title: "OK", style: .Plain, target: self, action: "OKButtonTapped:")
endtimetoolbar.setItems([endTimeOKButton], animated: true)
self.textFieldStartTime.inputView = endtimePickerView
self.textFieldStartTime.inputAccessoryView = endtimetoolbar
}
@IBAction func saveTapped(sender: AnyObject) {
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let contxt: NSManagedObjectContext = appDel.managedObjectContext!
let en = NSEntityDescription.entityForName("Divelog", inManagedObjectContext: contxt)
if (existingItem != nil) {
existingItem.setValue(textFieldDiveNumber.text, forKey: "divenumber")
existingItem.setValue(textFieldDiveLocation.text, forKey: "divelocation")
existingItem.setValue(textFieldDDate.text.dateValue!, forKey: "ddate")
existingItem.setValue(textFieldStartTime.text.starttimedateValue!, forKey: "starttime")
existingItem.setValue(textFieldEndTime.text.endtimedateValue!, forKey: "endtime")
} else {
var newItem = Divelog(entity: en!, insertIntoManagedObjectContext: contxt)
newItem.divenumber = textFieldDiveNumber.text
newItem.divelocation = textFieldDiveLocation.text
newItem.ddate = textFieldDDate.text.dateValue!
newItem.starttime = textFieldStartTime.text.starttimedateValue!
newItem.endtime = textFieldEndTime.text.endtimedateValue!
}
contxt.save(nil)
self.navigationController?.popToRootViewControllerAnimated(true)
}
@IBAction func cancelTapped(sender: AnyObject) {
self.navigationController?.popToRootViewControllerAnimated(true)
}
func OKButtonTapped(sender: UIBarButtonItem) {
self.textFieldDDate.endEditing(true)
self.textFieldDDate.text = datePickerView.date.stringValue
self.textFieldStartTime.endEditing(true)
self.textFieldStartTime.text = timePickerView.date.starttimestringValue
self.textFieldEndTime.endEditing(true)
self.textFieldEndTime.text = endtimePickerView.date.endtimestringValue
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
【问题讨论】:
-
我不完全理解你,但是当你调用/单击 func OKButtonTapped(你缺少@IBAction!)时,你设置了 textFieldDate、textFieldStartTime 和 textFieldEndTime
-
这些文件在没有 IBAction 的情况下保存到 coredata 中,当我只有 textFieldDDate 时我不需要它,它只是保存日期,但是当我添加 textFieldStartTime 和 textFieldEndTime 时,我不断将它们与每个其他。文件可以在这里找到dropbox.com/sh/1z73s5c81yau2lz/AAA-14uz94AXku4DthTEaHLza?dl=0