swift - 我怎么知道我的“forKey”用户默认键名是什么
问题描述
我有一个写作应用程序,当我想保存应用程序崩溃的新帖子时,用户可以创建一个添加到 tableview(和 Firebase)的帖子。它永远不会访问 if,它总是去 else,所以我认为 if 是不正确的。我如何知道 if 中 userdefault 中“forKey”的键名是什么?
func readFromNSUserDefault()-> Memory?
{
let d : UserDefaults = UserDefaults.standard
if UserDefaults.standard.array(forKey: "") != nil
{
print("exists")
let strTitle = d.object(forKey: "title") as? String
let strBody = d.object(forKey: "body") as? String
let strImageRef = d.object(forKey: "imageRef") as? String
let uid = d.object(forKey: "uid") as? String
let imageData = d.object(forKey: "imageData") as? Data
let key = d.object(forKey: "key") as? String
let date = d.object(forKey: "date") as? NSNumber
let m = Memory(title: strTitle!, body: strBody!, key: key!, uid: uid!, imageRef: strImageRef!, date: date!) // A variable from type memory
m.image = UIImage(data: imageData!)
m.key = key!
return m
}
print ("doesn't exist")
let m : Memory?
m = nil
return m
}
保存功能:
@IBAction func saveMemorey(_ sender: UIButton) {
let d = UserDefaults.standard
if( mode == "newMemory")
{
self.addNewMemory()
d.set(true, forKey: "userAdded")
}
else if mode == "edit"
{
self.editNewMemory()
d.set(true, forKey: "userEdited")
}
d.synchronize()
self.navigationController?.popViewController(animated: true) // Returns to the memories page after clicking 'save'
}
func addNewMemory()
{
let refposts = ref.child("MEmories").childByAutoId()
dateToSet = Double(self.future.millisecondsSince1970)
imgref = "\(txtTitle.text!).png"
self.m = Memory(title: txtTitle.text!, body: tBody.text!, key: "", uid: (Auth.auth().currentUser!.uid), imageRef: imgref!, date: self.dateToSet as NSNumber)
refposts.setValue(m.toAnyObject(), withCompletionBlock: {(error,data) in
self.m.key = data.key!
self.m.image = self.ivImage.image
self.saveImage()
self.saveToNSUserDefaualts(memory: self.m)
})
}
func saveToNSUserDefaualts(memory:Memory)
{
let d : UserDefaults = UserDefaults.standard
d.set(memory.title, forKey: "title")
d.set(memory.body, forKey: "body")
d.set(memory.key, forKey: "key")
d.set(memory.imageRef, forKey: "imageRef")
d.set(memory.uid, forKey: "uid")
d.set(memory.key, forKey: "key")
d.set(memory.date, forKey: "date")
let imageData = NSData(data:ivImage.image!.pngData()!)
d.set(imageData, forKey: "imageData")
d.synchronize()
}
加载功能:
func loadMemories()
{
let UID = Auth.auth().currentUser!.uid
self.ref.child("MEmories").queryOrdered(byChild: "uid").queryEqual(toValue: UID).observeSingleEvent(of: .value, with: {
snapShot in
if let dict = snapShot.value as? NSDictionary
{
for d in (dict as? Dictionary<String,AnyObject>)!
{
let title = d.value["title"] as?String
let body = d.value["body"] as? String
let uid = d.value["uid"] as? String
let imageRef = d.value["imageRef"] as? String
let date = d.value["date"] as? NSNumber
let m = Memory(title: title!, body: body!, uid: uid!,imageRef:imageRef!, date: date!)
m.key = d.key
let tempImageRef = self.sref.child(m.imageRef)
tempImageRef.getData(maxSize: 500*1024*1024, completion: {(data,error) in
if error == nil
{
if let imageData = data
{
m.image = UIImage(data: imageData)
self.memories.append(m)
self.tbl.reloadData()
}
}
})
}
}//end of if
})
}
记忆类:
import Foundation
import Firebase
class Memory
{
// Class Attributes
var title : String
var uid : String // user id
var body : String
var key : String
var imageRef : String!
var image : UIImage?
var date : NSNumber
init( title:String , body:String , key:String = "", uid:String , imageRef:String , date:NSNumber ) // Build function
{
self.title = title
self.key = key
self.body = body
self.uid = uid
self.imageRef = imageRef
self.key = ""
self.date = date
}
func toAnyObject()-> [String:AnyObject]
{
return ["title" : self.title as AnyObject,"body":self.body as AnyObject,"uid":self.uid as AnyObject,"imageRef":self.imageRef as AnyObject,"date":self.date as AnyObject
]
}
}
解决方案
推荐阅读
- javascript - 数组输入在 SQL 中另存为静态字“数组”
- android - 单击项目时在新活动中打开 webview
- json - 如何查询嵌套字段并带路径返回?
- python - 通过 pandas 自定义 step in loop
- azure - Azure Functions 是否有某种类型的请求管道?
- javascript - 为什么该函数没有在组件中返回数据,尽管它正确显示在控制台上?
- c++ - 如何使用其索引取消引用数组内部的指针?
- python - Cython 尝试将 self 与 cython 类一起使用
- ios - 从 tableView 中的 Firestore 单元格读取数据后随机重新排序
- powerbi - 如何根据来自不同列的其他选定值从 DAX 中的同一列中减去值?