【发布时间】:2016-11-15 11:52:27
【问题描述】:
我有一个加载到我的应用程序中的 API:
我在 API 调用中没有错误,在我运行获取数据函数的表视图中也没有错误。它以前完美地工作到现在。我没有更改任何代码。
我认为服务器会因通话而停机,但它们并非如您所见。
我正在运行一个打印“请求成功”,它在运行时显示在调试中,所以它正在获取数据,但是 print(self.exercises) 返回一个空数组,因此没有表数据......有什么想法吗?这是 API 调用
open class ApiService: NSObject {
open func getData(completionHandler: @escaping (NSDictionary?, NSError?) -> Void) -> Self {
//loads api filtering by english only
let requestUrl = "https://wger.de/api/v2/exercise/?format=json&language=2"
Alamofire.request(requestUrl, method: .get, encoding: URLEncoding.default)
.responseJSON { response in
switch response.result {
case .success( let data):
print("Request was sucessful")
completionHandler(data as? NSDictionary, nil)
case .failure(let error):
print("Request failed with error: \(error)")
completionHandler(nil, error as NSError?)
}
}
return self
}
表格功能
func getApiData() {
let _ = apiService.getData() {
(data, error) in
if let data = data {
if let results = data["results"] as? [[String:Any]] {
for result in results {
if let exercise = Exercise(dictionary: result) {
self.exercises.append(exercise)
}
}
self.exercisesTableView.reloadData()
print(self.exercises)
}
}
}
}
如果这可能会干扰,我也在使用序列化模型?
final public class Exercise {
var id: Int
var descrip: String
var name: String
var language: [Int]
var muscles: [Int]
var musclesSecondary: [Int]
var equipment: [Int]
public init?(dictionary: [String: Any]) {
guard
let id = dictionary["id"] as? Int,
let descrip = dictionary["description"] as? String,
let name = dictionary["name"] as? String,
let language = dictionary["language"] as? [Int],
let muscles = dictionary["muscles"] as? [Int],
let musclesSecondary = dictionary["muscles_secondary"] as? [Int],
let equipment = dictionary["equipment"] as? [Int]
else { return nil }
self.id = id
self.descrip = descrip
self.name = name
self.language = language
self.muscles = muscles
self.musclesSecondary = musclesSecondary
self.equipment = equipment
}
【问题讨论】:
-
你设置了tableView.datasource 属性了吗?还是您使用的是 UITableVIewController?您的 tableView 数据源委托函数是否从 self.excercises 读取数据?这里没有足够的信息
-
你说
print(self.exercises)打印一个空数组。会不会是您创建Exercise元素失败了?尝试在for result in results中添加一个print,在if let exercise = Exercise(dictionary: result)中添加另一个,看看它们是否被执行 -
@vadian 是正确的,我的错误,虽然我确信这个问题发生在我扩展序列化之前,我一定是弄错了,谢谢你的解决方案,如果你想把它发布为一个答案我可以标记它,否则我将删除问题
标签: json swift uitableview