附加 NSDate 类型的值不起作用
appending value of type NSDate is not working
我的视图控制器中有一个日期选择器。我想在 AnyObject 类型的字典中附加一个数组(我还尝试创建一个仅 NSDate 类型的新数组)。附加总是失败(没有错误,但数组保持为零)。
这是我的代码
var zulernen = NSUserDefaults.standardUserDefaults().objectForKey("lernen")
as? [String : [AnyObject]] ??
[String : [AnyObject]](
dictionaryLiteral: ("Fach1",[]),("Thema", []),("Date",[]),("Was", [])
)
以下是我在字典中追加数组的方法:
zulernen["Fach1"]?.append(Fach.text!)
zulernen["Thema"]?.append(Thema.text!)
zulernen["Was"]?.append(waszulernen.text!)
zulernen["Date"]?.append(Date.date)
defaults.setObject(zulernen, forKey: "lernen")
defaults.synchronize()
除了 zulernen["Date"] 的附加外,字典中所有项目的附加都有效。问题在哪里?
var Stichfragen = NSUserDefaults.standardUserDefaults().objectForKey("Stichfragen") as? [Int : [String]] ?? [Int : [String]](dictionaryLiteral: (1,[]),(2, []),(3,[]),(4, []),(5, []))
和:
Stichfragen[1]?.append(a.text! ?? "")
Stichfragen[1]?.append(b.text! ?? "")
Stichfragen[2]?.append(c.text! ?? "")
Stichfragen[2]?.append(d.text! ?? "")
Stichfragen[3]?.append(e.text! ?? "")
Stichfragen[3]?.append(f.text! ?? "")
Stichfragen[4]?.append(g.text! ?? "")
Stichfragen[4]?.append(h.text! ?? "")
Stichfragen[5]?.append(i.text! ?? "")
Stichfragen[5]?.append(j.text! ?? "")
我觉得你的数据结构很混乱。如果我理解正确的话,你实际上想要存储一个数组,某种对象有四个字段,主题,主题,任务和日期。相反,您存储了四个包含这些字段的数组,因此要重新创建一个对象,您必须从四个不同的列表中提取它,而创建一个对象同样复杂。删除其中一个对象更加复杂,会导致各种问题,包括您在此处遇到的问题。
您应该保留表示该对象的字典数组,[[String: AnyObject]]
。请注意,您是如何做到如此简洁的。
var toStudy = defaults.objectForKey("toStudy")
as? [[String: AnyObject]] ?? [[String:AnyObject]]()
现在您可以使用更具可读性的代码填充此数据结构:
var homework = [String: AnyObject]()
homework["Subject"] = subjectTextField.text ?? ""
homework["Topic"] = ... // etc.
homework["Date"] = datePicker.date ?? NSDate()
toStudy.append(homework)
我的视图控制器中有一个日期选择器。我想在 AnyObject 类型的字典中附加一个数组(我还尝试创建一个仅 NSDate 类型的新数组)。附加总是失败(没有错误,但数组保持为零)。
这是我的代码
var zulernen = NSUserDefaults.standardUserDefaults().objectForKey("lernen")
as? [String : [AnyObject]] ??
[String : [AnyObject]](
dictionaryLiteral: ("Fach1",[]),("Thema", []),("Date",[]),("Was", [])
)
以下是我在字典中追加数组的方法:
zulernen["Fach1"]?.append(Fach.text!)
zulernen["Thema"]?.append(Thema.text!)
zulernen["Was"]?.append(waszulernen.text!)
zulernen["Date"]?.append(Date.date)
defaults.setObject(zulernen, forKey: "lernen")
defaults.synchronize()
除了 zulernen["Date"] 的附加外,字典中所有项目的附加都有效。问题在哪里?
var Stichfragen = NSUserDefaults.standardUserDefaults().objectForKey("Stichfragen") as? [Int : [String]] ?? [Int : [String]](dictionaryLiteral: (1,[]),(2, []),(3,[]),(4, []),(5, []))
和:
Stichfragen[1]?.append(a.text! ?? "")
Stichfragen[1]?.append(b.text! ?? "")
Stichfragen[2]?.append(c.text! ?? "")
Stichfragen[2]?.append(d.text! ?? "")
Stichfragen[3]?.append(e.text! ?? "")
Stichfragen[3]?.append(f.text! ?? "")
Stichfragen[4]?.append(g.text! ?? "")
Stichfragen[4]?.append(h.text! ?? "")
Stichfragen[5]?.append(i.text! ?? "")
Stichfragen[5]?.append(j.text! ?? "")
我觉得你的数据结构很混乱。如果我理解正确的话,你实际上想要存储一个数组,某种对象有四个字段,主题,主题,任务和日期。相反,您存储了四个包含这些字段的数组,因此要重新创建一个对象,您必须从四个不同的列表中提取它,而创建一个对象同样复杂。删除其中一个对象更加复杂,会导致各种问题,包括您在此处遇到的问题。
您应该保留表示该对象的字典数组,[[String: AnyObject]]
。请注意,您是如何做到如此简洁的。
var toStudy = defaults.objectForKey("toStudy")
as? [[String: AnyObject]] ?? [[String:AnyObject]]()
现在您可以使用更具可读性的代码填充此数据结构:
var homework = [String: AnyObject]()
homework["Subject"] = subjectTextField.text ?? ""
homework["Topic"] = ... // etc.
homework["Date"] = datePicker.date ?? NSDate()
toStudy.append(homework)