为什么我在 swift 的表格视图中得到额外的单元格
Why I am getting extra cells in tableview in swift
这是Json响应: 作为响应,我只需要在表视图中显示oniTaag = 1
联系人用户名如何?我得到 oniTaag = 0
contact userName 作为 tableview 中的标签为什么?
contacts JSON group member
["5555555544": {
oniTaag = 1;
profilePic = "<null>";
tagged = 0;
userId = a398056b39cb4d0fb3ad666b86abe2e1;
userName = "security test";
userType = personal;
},
"0000034500": {
oniTaag = 0;
profilePic = "<null>";
tagged = 0;
userId = "<null>";
userName = "<null>";
userType = personal;
},
"0000043251": {
oniTaag = 1;
profilePic = "<null>";
tagged = 0;
userId = 835e13f3b16f4d0d84384c4aa4e2c0b5;
userName = "daddy?s dad add";
userType = personal;
}]
这里 oniTaag = 1
意味着 true
我只需要在表格视图中显示那些联系人..但是这里 oniTaag = 0
联系人显示标签,单元格中的标签,为什么?
代码如下:
import Contacts
struct ContactDetailsJson {
var userId: String?
var onItag: Bool?
var taggedStat: Bool?
var userName: String?
var phnum: String?
init(userId: String, oniTaag: Bool, tagged: Bool, userName: String, key: String) {
self.userId = userId
self.onItag = oniTaag
self.taggedStat = tagged
self.userName = userName
self.phnum = key
}
}
class GroupMembersViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var phoneNum: String?
var contacts = [CNContact]()
var phNumArray = [String]()
var onitag: Bool?
var userNAme: String?
var jsonArrayFilter = [ContactDetailsJson]()
@IBOutlet weak var groupMemTableview: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
ContactsModel.shared.getLocalContacts {(contact) in
self.contacts.append(contact!)
print("all contects \(contact)")
self.phNumArray = self.contacts.flatMap { [=12=].phoneNumbers }.map { [=12=].value.stringValue }
}
self.callPostApi()
}
func callPostApi() {
let url = URL(string: "http://filter/taggedusers/")!
var request = URLRequest(url: url)
try? request.setMultipartFormData(["contactsList": "\(phNumArray)"], encoding: .utf8)
URLSession.shared.dataTask(with: request) { data, _, _ in
if let data = data, let jsonObj = try? JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] {
print("contacts JSON group member\(jsonObj)")
let phnDict: [String : Any] = (jsonObj as? [String : Any])!
for (key, val) in phnDict{
let phnum: String = key as? String ?? ""
let phKey = val as! [String : Any]
let userId = phKey["userId"] as? String
let userNam = phKey["userName"]
self.taggedStatus = phKey["tagged"] as? Bool
self.onitag = phKey["oniTaag"] as? Bool
self.userNAme = phKey["userName"] as? String
self.jsonArrayFilter.append(ContactDetailsJson(userId: userId ?? "", oniTaag: self.onitag ?? true, tagged: self.taggedStatus ?? true, userName: self.userNAme ?? "", key: phnum))
}
DispatchQueue.main.async {
self.groupMemTableview.reloadData()
}
}
}.resume()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return jsonArrayFilter.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell1: GroupMemberTableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell2", for: indexPath) as! GroupMemberTableViewCell
jsonArrayFilter = jsonArrayFilter.filter { ([=12=].onItag ?? true) }
let aJson = jsonArrayFilter[indexPath.row]
if aJson.onItag == true{
cell1.nameLabel.text = aJson.userName
cell1.phnumLabel.text = aJson.phnum
}
return cell1
}
}
获得如下输出:这里我不需要标签 label cell.. 意思是 oniTaag = 0
cell.. 怎么样?
请帮我写代码。
编辑:此处let aJson = jsonArrayFilter[indexPath.row]
低于错误
error: Thread 1: Fatal error: Index out of range
因为你使用了所有数组而没有过滤,这个 if 语句没有命中
if aJson.onItag == true{
cell1.nameLabel.text = aJson.userName
cell1.phnumLabel.text = aJson.phnum
}
对于具有 onItag = false
的模型,您会得到一个带有空标签的虚拟单元格,您需要在使用它之前过滤数组
self.jsonArrayFilter.append(ContactDetailsJson(userId: userId ?? "", oniTaag: self.onitag ?? true, tagged: self.taggedStatus ?? true, userName: self.userNAme ?? "", key: phnum))
}
jsonArrayFilter = jsonArrayFilter.filter { [=11=].onItag ?? false }
这是Json响应: 作为响应,我只需要在表视图中显示oniTaag = 1
联系人用户名如何?我得到 oniTaag = 0
contact userName 作为 tableview 中的标签为什么?
contacts JSON group member
["5555555544": {
oniTaag = 1;
profilePic = "<null>";
tagged = 0;
userId = a398056b39cb4d0fb3ad666b86abe2e1;
userName = "security test";
userType = personal;
},
"0000034500": {
oniTaag = 0;
profilePic = "<null>";
tagged = 0;
userId = "<null>";
userName = "<null>";
userType = personal;
},
"0000043251": {
oniTaag = 1;
profilePic = "<null>";
tagged = 0;
userId = 835e13f3b16f4d0d84384c4aa4e2c0b5;
userName = "daddy?s dad add";
userType = personal;
}]
这里 oniTaag = 1
意味着 true
我只需要在表格视图中显示那些联系人..但是这里 oniTaag = 0
联系人显示标签,单元格中的标签,为什么?
代码如下:
import Contacts
struct ContactDetailsJson {
var userId: String?
var onItag: Bool?
var taggedStat: Bool?
var userName: String?
var phnum: String?
init(userId: String, oniTaag: Bool, tagged: Bool, userName: String, key: String) {
self.userId = userId
self.onItag = oniTaag
self.taggedStat = tagged
self.userName = userName
self.phnum = key
}
}
class GroupMembersViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var phoneNum: String?
var contacts = [CNContact]()
var phNumArray = [String]()
var onitag: Bool?
var userNAme: String?
var jsonArrayFilter = [ContactDetailsJson]()
@IBOutlet weak var groupMemTableview: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
ContactsModel.shared.getLocalContacts {(contact) in
self.contacts.append(contact!)
print("all contects \(contact)")
self.phNumArray = self.contacts.flatMap { [=12=].phoneNumbers }.map { [=12=].value.stringValue }
}
self.callPostApi()
}
func callPostApi() {
let url = URL(string: "http://filter/taggedusers/")!
var request = URLRequest(url: url)
try? request.setMultipartFormData(["contactsList": "\(phNumArray)"], encoding: .utf8)
URLSession.shared.dataTask(with: request) { data, _, _ in
if let data = data, let jsonObj = try? JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] {
print("contacts JSON group member\(jsonObj)")
let phnDict: [String : Any] = (jsonObj as? [String : Any])!
for (key, val) in phnDict{
let phnum: String = key as? String ?? ""
let phKey = val as! [String : Any]
let userId = phKey["userId"] as? String
let userNam = phKey["userName"]
self.taggedStatus = phKey["tagged"] as? Bool
self.onitag = phKey["oniTaag"] as? Bool
self.userNAme = phKey["userName"] as? String
self.jsonArrayFilter.append(ContactDetailsJson(userId: userId ?? "", oniTaag: self.onitag ?? true, tagged: self.taggedStatus ?? true, userName: self.userNAme ?? "", key: phnum))
}
DispatchQueue.main.async {
self.groupMemTableview.reloadData()
}
}
}.resume()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return jsonArrayFilter.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell1: GroupMemberTableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell2", for: indexPath) as! GroupMemberTableViewCell
jsonArrayFilter = jsonArrayFilter.filter { ([=12=].onItag ?? true) }
let aJson = jsonArrayFilter[indexPath.row]
if aJson.onItag == true{
cell1.nameLabel.text = aJson.userName
cell1.phnumLabel.text = aJson.phnum
}
return cell1
}
}
获得如下输出:这里我不需要标签 label cell.. 意思是 oniTaag = 0
cell.. 怎么样?
请帮我写代码。
编辑:此处let aJson = jsonArrayFilter[indexPath.row]
低于错误
error: Thread 1: Fatal error: Index out of range
因为你使用了所有数组而没有过滤,这个 if 语句没有命中
if aJson.onItag == true{
cell1.nameLabel.text = aJson.userName
cell1.phnumLabel.text = aJson.phnum
}
对于具有 onItag = false
的模型,您会得到一个带有空标签的虚拟单元格,您需要在使用它之前过滤数组
self.jsonArrayFilter.append(ContactDetailsJson(userId: userId ?? "", oniTaag: self.onitag ?? true, tagged: self.taggedStatus ?? true, userName: self.userNAme ?? "", key: phnum))
}
jsonArrayFilter = jsonArrayFilter.filter { [=11=].onItag ?? false }