我正在尝试从CloudKit加载一些数据以使用自定义单元格填充tableview,并且我很难获得数据。
当我将行数定义为CKRecord数组的计数时,tableview显示,但没有任何内容加载到它们中。它们只是正确间隔开来,以便图像在那里。此外,当我在let record = matches[indexPath.row]
设置断点时,它不会触发。
但是,如果我将return matches.count
更改为实际数字,则项目会在let record = matches[indexPath.row]
崩溃
带有索引超出范围的错误。我想保留行数作为记录数组的计数,但这是实际执行调用tableview单元格的覆盖函数的唯一更改。
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return matches.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Card", for: indexPath) as! MatchTableViewCell
let record = matches[indexPath.row]
if let img = record.value(forKey: "Picture") as? CKAsset {
cell.profileimg.image = UIImage(contentsOfFile: img.fileURL.path)
}
return cell
}
感谢任何建议
更新 - 这是我加载模型的地方
func loadModel() {
let totalMatch = (defaults.object(forKey: "passedmatch") as! [String] )
let predicateMatch = NSPredicate(format: "not (UserID IN %@)", totalMatch )
ProfilesbyLocation = defaults.object(forKey: "Location") as! String
let query = CKQuery(recordType: ProfilesbyLocation , predicate: predicateMatch )
publicData.perform(query, inZoneWith: nil,completionHandler: ({results, error in
print("loading")
if (error != nil) {
let nsError = error! as NSError
print(nsError.localizedDescription)
print ("error")
} else {
if results!.count > 0 {
DispatchQueue.main.async() {
self.tableView.reloadData()
self.refresh.endRefreshing()
print("refreshed")
}
}
}
}
)
)}
答案 0 :(得分:0)
听起来你没有打电话
tableview.reloadData()
异步数据进入后。保持numberOfRowsInSection
原样并确保当您的网络请求回来时您正在重新加载。应该这样做。
答案 1 :(得分:0)
如果您从后台线程(或队列)收到了数据,请确保在主线程(或队列)下更新UI元素时。试试这个:
import csv
import tensorflow as tf
from tensorflow.contrib.cloud.python.ops import bigquery_reader_ops
from tensorflow.contrib.lookup import KeyValueTensorInitializer, HashTable
from tensorflow.contrib.tensor_forest.client.random_forest import TensorForestEstimator
from tensorflow.contrib.tensor_forest.python.tensor_forest import ForestHParams
from tensorflow.python.training.input import string_input_producer
sess = tf.Session()
with open('event_classes.csv', mode='r') as infile:
reader = csv.reader(infile)
event_names, event_numbers = list(zip(*[(r[0], int(r[1])) for r in reader]))
def input_fn():
# Create maps between event names and event numbers
event_class_map = HashTable(KeyValueTensorInitializer(
event_names, event_numbers, key_dtype=tf.string, value_dtype=tf.int64), int(0))
reverse_event_class_map = HashTable(KeyValueTensorInitializer(
event_numbers, event_names, key_dtype=tf.int64, value_dtype=tf.string), "Unknown")
# Specify features to read
features = {"time_{}".format(i): tf.FixedLenFeature([1], tf.string, default_value="") for i in range(4)}
# Create a Reader.
reader = bigquery_reader_ops.BigQueryReader(project_id="drivemode-com",
dataset_id="temp_stephane",
table_id="event_history",
timestamp_millis=1497502522,
num_partitions=1,
features=features)
# Populate a queue with the BigQuery Table partitions.
queue = string_input_producer(reader.partitions())
# Read and parse examples.
row_id, examples_serialized = reader.read_up_to(queue, 100)
examples = tf.parse_example(examples_serialized, features=features)
# Process the Tensors example["name"], example["age"], etc...
for i in range(4):
col = "time_{}".format(i)
examples[col] = event_class_map.lookup(examples[col])
# event_class_map.init.run(session=sess)
label = examples.pop("time_3")
return examples, label
hparams = ForestHParams(num_classes=len(event_numbers), num_features=3, max_nodes=3, num_trees=1).fill()
estimator = TensorForestEstimator(hparams)
estimator.fit(input_fn=input_fn, steps=1)
tf.train.start_queue_runners(sess)
print sess.run(estimator.evaluate(input_fn=input_fn))
答案 2 :(得分:0)
这解决了我的问题。
首先,断开TableView的Delegate / DataSource与Interface Builder refer this image的连接。当您最终准备好匹配数组的数据时,请添加此数据。
`DispatchQueue.main.async {
tableView.dataSource = self
tableView.delegate = self
tableView.reloadData
}`
希望这有帮助。
答案 3 :(得分:0)
您的matches
似乎不正确。致电func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int)
之前
,你应该检查你的matches
。
如果您仍然不确定。您可以使用字符串文字初始化matches
并尝试。