从共享扩展名(SLComposeServiceViewController)到以后的主机应用程序断点无法快速工作,并且打印也无法工作!!!!
override func viewDidLoad() {
super.viewDidLoad()
let userDefault = UserDefaults(suiteName: "group.com.abcd.sharecontent1")
if let dict = userDefault?.value(forKey: "storedURLData"){
let data = (dict as AnyObject).value(forKey: "urlData") as! Data
let nameStr = (dict as AnyObject).value(forKey: "name") as! String
print("Data is :- ", data)
print("Name is :- ", nameStr)
// Here nameStr data is going to Label but not printing
self.lblText.text = nameStr
// This print nameStr is not working
print("NameStr is :-", nameStr)
// Data to Swift Dictionary
do {
let dictionary = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions()) as! NSDictionary
print("dictionary :-", dictionary)
}
catch {
// catch error.
}
userDefault?.removeObject(forKey: "storedURLData")
userDefault?.synchronize()
} else {
print("The value for key called storedURLData does not exist.")
}
}
不调用断点并打印
答案 0 :(得分:0)
如果此视图已经显示但没有取消分配,则viewDidLoad
方法仅被调用一次。
我对您的建议是将代码移入自己的方法并调用该方法。
第二,如果您只需要一次数据,请从viewDidLoad
方法中调用该方法。如果您需要在每次返回此视图时更新此数据,请使用viewWillAppear
或viewDidAppear
方法进行调用,具体取决于您如何使用此数据(例如,将视图留给另一个查看并返回)。
第三,如果未命中您的断点并且未显示打印语句,则表示if let dict = userDefault?.value(forKey:"storedURLData"){
内容不存在。仅当if let dict = ..
存在且具有值时,才会击中dict
内的打印语句和断点。您可能没有名为storedURLData
的键的值,或者该键有拼写错误。
在声明您的userDefault
以检查该对象内部内容并确认您的密钥storedURLData
存在之后,放置一个断点。弄清楚是否不清楚所需值是否存在的最佳方法是:
if let dict = .... {
// All of your code for when the dict exists
} else {
print("The value for key called storedURLData does not exist.")
}
如果else语句打印出来,请在此处放置一个断点并检查您的userDefaults
对象。