gpt4 book ai didi

ios - 通过 Switch 语句调用 API

转载 作者:行者123 更新时间:2023-11-30 14:07:22 24 4
gpt4 key购买 nike

我有两个 TableView ,第一个 TableView 具有永远不会更改的固定数据。当用户点击特定单元格(例如单元格 1)时,将调用 API 1,并且 第二个表格 View 会加载点击单元格 2 时返回的数据API 2称为第二个 TableView 加载返回的数据。

为了解决这个问题,我尝试了这个。

在我的第一个表格 View 中,我记录了哪个表格单元格被点击,并将该信息发送到第二个表格 View 通过准备转场:

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {


if let destination = segue.destinationViewController as? BioListTableViewController {
let indexPath = self.tableView.indexPathForSelectedRow()

if let row:Int = indexPath?.row {

// PASS which cell was tapped by the user
destination.cellTapped = row
}
}
}

然后在我的第二个 TableView 中,我使用 switch 语句来检查点击的单元格是否为 0、1、2 等。并在此基础上运行 switch case。每个 switch case 都有一个不同的函数,调用不同的 API。见下文:

 import UIKit

struct Note {

var name:String
var job:String
}

struct WeatherSummary {
var id: String
}

class BioListTableViewController: UITableViewController {


var cellTapped = Int()

@IBOutlet var tableview: UITableView!

private var notes = Array<Note>()

var bioArray = NSArray(){

didSet{
tableview.reloadData()
}
}

override func viewDidLoad() {
super.viewDidLoad()
switch cellTapped {

case 0:
test()
case 1:
testTwo()
default:
println("Error")

}

var newItem:Note = Note(name: "", job: "")

for x in bioArray {
if let id = x["employeeName"] as? String{
newItem.name = id
}
}

}

func test() {

println("This is TWEST")

var weatherArray = [WeatherSummary]()
var request = NSMutableURLRequest(URL: NSURL(string: "myAPI-Link")!)
var session = NSURLSession.sharedSession()
request.HTTPMethod = "GET"
UIApplication.sharedApplication().networkActivityIndicatorVisible = true
var err: NSError?

request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")

var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
println("Response: \(response)")
var strData = NSString(data: data, encoding: NSUTF8StringEncoding)
println("Body: \(strData)")
var err: NSError?
var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error: &err) as? NSArray

UIApplication.sharedApplication().networkActivityIndicatorVisible = true

// Did the JSONObjectWithData constructor return an error? If so, log the error to the console
if(err != nil) {

println(err!.localizedDescription)
let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding)
println("Error could not parse JSON: '\(jsonStr)'")

dispatch_async(dispatch_get_main_queue()) {

var alert = UIAlertController(title: "Alert", message: "Oops! Wrong Details, Try Again", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)

}
}else {

UIApplication.sharedApplication().networkActivityIndicatorVisible = false
// The JSONObjectWithData constructor didn't return an error. But, we should still
// check and make sure that json has a value using optional binding.
var newWeather = WeatherSummary(id:"")

if let parseJSON = json {

for weather in parseJSON {

if let id = weather["employeeName"] as? String{
println(" LOOK HERE \(id)")
newWeather.id = id
}
}

weatherArray.append(newWeather)
self.bioArray = parseJSON
} else {
// Woa, okay the json object was nil, something went worng. Maybe the server isn't running?
let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding)
println("Error could not parse JSON: \(jsonStr)")

}
}
})

task.resume()
}

func testTwo(){
println("THIS IS TEST 2")
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Potentially incomplete method implementation.
// Return the number of sections.
return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete method implementation.
// Return the number of rows in the section.
return self.bioArray.count ?? 0
}


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("bioCell", forIndexPath: indexPath) as! UITableViewCell

let weatherSummary: AnyObject = bioArray[indexPath.row]
if let id = weatherSummary["employeeName"] as? String //Dont know the exact syntax.
{
cell.textLabel?.text = id
}

if let job = weatherSummary["jobTitle"] as? String {
cell.detailTextLabel?.text = job
}
return cell
}
}

我的问题:

我的问题是,当我 println 返回的数据时,它正在被打印并且我可以看到它。但我的第二个 TableView 是空的。它不显示数据。我不确定为什么数据没有显示在第二个 TableView 上。我可以使用println看到数据,这证明API确实返回了真实的数据。

有什么建议吗?

对于任何错误,我们深表歉意。如果我犯了错误,请告诉我,我会改正它。

谢谢。

最佳答案

如果没有看到数据或 Storyboard,很难回答这个问题。但您应该检查一些事情,设置断点并确保它正在调用:

  • bioArray的didSet方法
  • numberOfRowsInSection 是否命中并返回某些内容?
  • 委托(delegate)和数据源设置正确吗?
  • cellForRowAtIndexPath 是否命中,您是否有名为:employeeName 和 jobTitle 的键

请先检查这些内容。

关于ios - 通过 Switch 语句调用 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32198628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com