我正在尝试构建一个简单的应用程序,用户可以从日期选择器(生日或任何事件)输入日期,然后代码将从用户提供应用程序之日起减去今天的日期,以获取天数的差异,然后显示表格视图中剩余天数的倒计时,以及事件的名称。我有2个View Controllers,主要是TableViewController,然后是AddViewController。我已经想出如何在几天内获得差异,我的表视图已经设置好并且所有代码都运行得很好。我只是在显示表视图中剩余的天数时遇到问题,因为它们是整数。我很乐意从更有经验的开发人员那里得到一些帮助,因为我对iOS编程比较陌生。所以没有进一步的到期,这是我的代码:
@IBAction func addButtonTapped(sender: AnyObject) {
var chosen: NSDate = self.datePicker.date
var today: NSDate = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(.DayCalendarUnit, fromDate: today, toDate: chosen, options: nil)
let secondsInADay = ((60 * 60) * 24)
let daysLeft = (components.hashValue / secondsInADay)
var userDefaults: NSUserDefaults = NSUserDefaults()
var itemList: NSMutableArray? = userDefaults.objectForKey("itemList") as? NSMutableArray
var dataSet: NSMutableDictionary = NSMutableDictionary()
dataset.setObject(eventTextField.text, forKey: "itemEventName")
dataSet.setObject(datePicker.date, forKey: "itemEventDate")
dataSet.setObject(daysLeft, forKey: "itemDaysLeft")
if ((itemList) != nil) {
var newMutableList: NSMutableArray = NSMutableArray()
for dict: AnyObject in itemList! {
newMutableList.addObject(dict as NSDictionary)
}
userDefaults.removeObjectForKey("itemList")
newMutableList.addObject(dataSet)
userDefaults.setObject(newMutableList, forKey: "itemList")
} else {
userDefaults.removeObjectForKey("itemList")
itemList = NSMutableArray()
itemList!.addObject(dataSet)
userDefaults.setObject(itemList, forKey: "itemList")
}
userDefaults.synchronize()
self.navigationController?.popToRootViewControllerAnimated(true)
}
以上是我的addViewController中的代码,用户从文本字段输入名称,并从日期选择器输入日期。下面是我的tableViewController中代码的一部分。基本上我希望Int daysLeft显示在单元格中。
var toDoItems: NSMutableArray = NSMutableArray()
override func viewDidAppear(animated: Bool) {
var userDefaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
var itemListFromUserDefaults: NSMutableArray? = userDefaults.objectForKey("itemList") as? NSMutableArray
if ((itemListFromUserDefaults) != nil) {
toDoItems = itemListFromUserDefaults!
}
self.tableView.reloadData()
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell
var toDoItem: NSDictionary = toDoItems.objectAtIndex(indexPath.row) as NSDictionary
cell.textLabel?.text = toDoItem.objectForKey("itemDaysLeft") as? String
return cell
}
答案 0 :(得分:0)
在这一行上加上一个断点:var toDoItem: NSDictionary = toDoItems.objectAtIndex(indexPath.row) as NSDictionary
来查看toDoItemContains是什么,只是为了验证它实际上是你所期望的。但我认为以下代码可能有所帮助。
而不是:
cell.textLabel?.text = toDoItem.objectForKey("itemDaysLeft") as? String
尝试:
cell.textLabel?.text = NSString(format:"%@", toDoItem.objectForKey("itemDaysLeft")) as String