我正在使用swift和AWS DynamoDB for mobile app。我按照教程,可以成功保存数据。但是,当我尝试加载数据时,我发现保存和加载数据总是在viewdidload中的所有任务完成之后,所以我无法在同一视图中传递数据?有没有办法立即保存或退出数据?
下面是我的代码
mapper.query(Table.self, expression: queryExpress).continueWith{(task: AWSTask<AWSDynamoDBPaginatedOutput>!) -> Any? in
print("test")
if let error = task.error as NSError? {
print("The requst failed. Error: \(error)")
}
if let paginatedOutput = task.result {
for item in paginatedOutput.items
{
print("quring")
//pass info out to array
}
}
return nil
}
答案 0 :(得分:0)
从网络中获取数据是一种异步操作。在完成屏幕时,您无法延迟加载屏幕。这可能需要很长时间。它可能永远不会完成。
您的视图控制器必须处理它尚未拥有数据的情况,并在该数据可用时自行更新。这样做的第一步是避免在视图控制器中进行网络查询。视图控制器永远不应直接查询网络。他们应该查询比视图控制器更长的模型对象。模型对象负责对网络进行查询并使用结果更新自己。然后视图控制器将根据模型自行更新。此模式的名称是模型视图控制器,是Cocoa开发的基础。 (搜索有关此模式的许多教程和讨论。)
但无论您在何处进行查询和存储数据,您始终都必须处理数据尚不可用的情况,并在此期间显示某些内容。在分布式系统中没有什么能解决这个问题。
答案 1 :(得分:0)
查询完成后,将数据加载到视图中。您可以使用viewDidLoad
方法发送查询,但是当数据到达时,您需要使用您在数据到达时调用的其他方法来显示数据。