使用Swift 3,使用JSON和PHP从MYSQL数据库读取博客阅读器应用程序。用户可以使用关注按钮(以及取消关注按钮)保存他们想要继续获取更新的博客。只需尝试保存跟随的博客ID,而不是保存整个数组,以便应用程序只查找博客ID并显示用户所关注的特定博客。
这是我在加载用户默认值时遇到的错误
条件绑定的初始化程序必须具有可选类型,而不是' Void' (又名'()')
此错误位于func loadUserDefaults()
的{{1}}第一行MainController.swift
。
在用户单击跟随按钮后,我在数组之间移动单元格,在tableview中的各个部分之间移动,然后我调用if let data = UserDefaults.
这是saveUserDefaults()
MainController.swift
这是var mainArray = [Blog]()
var followedArray = [Blog]()
var filteredArray = [Blog]()
var followedIdentifiers = Set<String>()
override func viewDidLoad() {
super.viewDidLoad()
// Receiving Data from Server
retrieveDataFromServer()
// NSCoding - Unarchiving Data (followedID)
loadUserDefaults()
}
// NSCoding: Archiving UserDefaults
func saveUserDefaults() {
// Saving to UserDefaults
let encodedData = NSKeyedArchiver.archivedData(withRootObject: self.followedIdentifiers)
UserDefaults.standard.setValue(encodedData, forKey: "followedID")
UserDefaults.standard.synchronize()
}
// NSCoding: Unarchiving UserDefaults *** ERROR IS HERE ***
func loadUserDefaults() {
// Unarchiving Data -- ERROR: THIS FIRST LINE --
if let data = UserDefaults.standard.setValue(Array(self.followedIdentifiers), forKey: "followedID"),
let myFollowedList = NSKeyedUnarchiver.unarchiveObject(with: data) as? [Blog] {
self.followedIdentifiers = myFollowedList
self.followedIdentifiers = Set(UserDefaults.standard.stringArray(forKey: "followedID")!)
} else {
print("Error/ Empty: (Loading UserDefaults (followedID))")
}
}
// Retrieving Data from Server
func retrieveDataFromServer() {
let getDataURL = "http://example.com/receiving.php"
let url: NSURL = NSURL(string: getDataURL)!
do {
let data: Data = try Data(contentsOf: url as URL)
let jsonArray = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as! NSMutableArray
// Clear the arrays
self.followedArray = [Blog]()
self.mainArray = [Blog]()
// Looping through jsonArray
for jsonObject in jsonArray {
if let blog = Blog(jsonObject:jsonObject as! [String : Any]) {
// Check if identifiers match
if followedIdentifiers.contains(blog.blogID) {
self.followedArray.append(blog)
} else {
self.mainArray.append(blog)
}
}
}
} catch {
print("Error: (Retrieving Data)")
}
myTableView.reloadData()
}
,它处理所有博客对象和NSCoding
Blog.swift
答案 0 :(得分:1)
代码行:
let data = UserDefaults.standard.setValue(Array(self.followedIdentifiers), forKey: "followedID")
没有意义,因为setValue方法不返回任何值。 看起来你需要用(Swift 3)替换它:
let data = UserDefaults.standard.data(forKey: "followedID")
使用@closetCoder评论 更新了
答案 1 :(得分:1)
setValue函数是一个void函数,因此无法将其赋值给变量数据,因为它没有返回值。
以下是Apple的UserDefaults文档:https://developer.apple.com/documentation/foundation/userdefaults